[ Aleksandar Vasic @ 14.02.2008. 17:35 ] @
Treba mi mala pomoc npr. ako imam u textbox1 rec ovakvu TheEndIsClose,treba mi kod koji ce da razdvoji to ovako The End Is Close,odnosno gde god dodje veliko slovo,da pre njega bude razmak,tnx ;)
[ steve585 @ 14.02.2008. 18:34 ] @
Pokusaj ovako:
Definiraj velika slova npr. chr(65) trebalo bi biti veliko slovo A i tako 30 puta za ostala velika slova
Onda pomocu funkcije mislim da je Mid() ispituj vrijednost svakog slova, ako ti se vrijednost slova nalazi u naprijed navedenom nizu na promjenjivu NovaRijec dodaj vrijednost nadjenog velikog slova i Space(1) u protivnom na promjenjivu NovaRijec dodaj samo vrijednost nadjenog slova

To je prvo sto mi pada na pamet :-)
[ Aleksandar Vasic @ 14.02.2008. 18:47 ] @
Uh,mora da to moze prostije,sacekacu josh neki predlog ako bude imao :D
[ Shadowed @ 14.02.2008. 19:06 ] @
E, ovako, ovo bi trebalo da bude princip, ali posto VB6 ima gomilu razlicitih varijanti za pocetak index-a (negde ide od nule negde od jedan) ovo ne radi. A mene iskreno mrzi da se zezam sa nedoslednoscu istog, ali mislim da ti je bitno da skontas poentu pa ces sam srediti brojanja.
Ovo je uradjeno racunajuci da se uvek krece od nule (i dobices error kod Mid() funkcije):

Code:

Private Function InsertSpace(aString As String, index As Integer) As String
    InsertSpace = Left(aString, index) & " " & Right(aString, Len(aString) - index)
End Function

Private Function DivideWords(aString As String) As String
    Dim i As Integer
    Dim result As String
    
    result = aString
    For i = 0 To Len(aString) - 1
        If UCase$(Mid(aString, i, 1)) = Mid(aString, i, 1) Then
            result = InsertSpace(result, i)
            i = i + 1
        End If
    Next i
    DivideWords = result
End Function
[ Aleksandar Vasic @ 14.02.2008. 19:10 ] @
Hvala Shadowed,snaci cu se ;)
[ galahad @ 14.02.2008. 19:15 ] @
Pokushaj to da reshish ovako, tj. da proverish da li je neshto upper case:

Code:

Dim i As Long
Dim s As String

s = Text1.Text
For i = 1 To Len(s)
  If (Mid(s, i, 1) = UCase(Mid(s, i, 1))) Then
    ' Ovde strpaj kod da ubacivanje space-a
  End If
Next i
Text1.Text = s


Text1.Text ubacujem u s, da bi bilo brzhe izvrshavanje koda, .Text property je spora kad se radi update, posebno vetjeg texta...
[ Aleksandar Vasic @ 14.02.2008. 22:22 ] @
Kada uradim ovako izbacuje mi sledecu greshku:
Invalid Procedure or Argument i markira liniju InsertSpace = Left(aString, index) & " " & Right(aString, Len(aString) - index)


Code:
Private Sub Command1_Click()
Dim i As Long
Dim s As String
Dim result As String
s = Text1.Text
For i = 1 To Len(s)
  If (Mid(s, i, 1) = UCase(Mid(s, i, 1))) Then
    result = InsertSpace(result, i)
  End If
Next i
Text1.Text = s
End Sub
Private Function InsertSpace(aString As String, index As Long) As String
    InsertSpace = Left(aString, index) & " " & Right(aString, Len(aString) - index)
End Function
[ Shadowed @ 14.02.2008. 22:48 ] @
Hah, to je to sto kazem... Ne znam za koji index ti dodje do greske, ali pretpostavljam za poslednji, probaj staviti Left(aString, index - 1), eksperimentisi malo :)
[ Aleksandar Vasic @ 14.02.2008. 22:58 ] @
i dalje isto,ali sacu ja u to da se udubim,javicu vam shta sam napravio ;)

Edit:

e a kad uradim ovako onda mi umesto velikih slova upishe razmak :D

Code:
Private Function InsertSpace(aString As String, index As Long) As String
    InsertSpace = Left(aString, index - 1) & " " & Right(aString, Len(aString) - index)
End Function
Private Sub Command1_Click()
Dim i As Long
Dim s As String
Dim result As String
s = Text1.Text
For i = 1 To Len(s)
  If Mid(s, i, 1) = UCase(Mid(s, i, 1)) Then
    s = InsertSpace(s, i)
  End If
Next i
Text1.Text = s
End Sub
[ Aleksandar Ružičić @ 14.02.2008. 23:34 ] @
evo po meni najelegantinjeg resenja:
Code:

Public Function AddSpaces(str As String) As String

    Dim re  As RegExp
    
    Set re = New RegExp
    
    re.Pattern = "([A-Z])"
    re.Global = True
    re.IgnoreCase = False
    
    AddSpaces = LTrim$(re.Replace(str, " $1"))

End Function

samo dodaj referencu na Microsoft VBScript Regular Expressions 5.5 (ovaj dll je ukljucen sa IE verzijom 5.5 i navise, znaci imas ga default instaliranog od 98-ice pa nadalje)
[ Shadowed @ 14.02.2008. 23:43 ] @
Slazem se.
Nisam ni znao za tu biblioteku. Dok sam radio u 6ici nisam koristio regexp a kasnije, pa... znas vec :]
[ stefanpn @ 15.02.2008. 01:48 ] @
Zasto povlaciti dodatne biblioteke koje ce ti na svakom drugom racunaru verovatno praviti probleme kad mozes sam resiti problem.

Prosto:
Code:

Public Function fncUbaciSpace(ByVal myString As String) As String
    fncUbaciSpace = fncUbaciSpace + Mid$(myString, 1, 1)
    For t = 2 To Len(myString)
        If Asc(Mid$(myString, t, 1)) > 64 And Asc(Mid$(myString, t, 1)) < 91 Then
            fncUbaciSpace = fncUbaciSpace + " " + Mid$(myString, t, 1)
        Else
            fncUbaciSpace = fncUbaciSpace + Mid$(myString, t, 1)
        End If
    Next t
End Function

PS.
Kad god to ne iziskuje prevelik trud, izbegavaj da koristis dll biblioteke.

Pozdrav.
[ Aleksandar Ružičić @ 15.02.2008. 03:34 ] @
Citat:
stefanpn: Zasto povlaciti dodatne biblioteke koje ce ti na svakom drugom racunaru verovatno praviti probleme....

Citat:
Aleksandar Ružičić: ....(ovaj dll je ukljucen sa IE verzijom 5.5 i navise, znaci imas ga default instaliranog od 98-ice pa nadalje)

hmm, cisto sumnjam da postoji neki racunar sa instaliranom 95-icom...


edit: evo okacio sam tutorijal o regularnim izrazima: Regularni izrazi u VB6

[Ovu poruku je menjao Aleksandar Ružičić dana 15.02.2008. u 06:14 GMT+1]
[ Aleksandar Vasic @ 15.02.2008. 10:19 ] @
e hvala vam puno :D
[ stefanpn @ 15.02.2008. 13:21 ] @
@ Aleksandar Ružičić

Ok, postoji, ali izvrsna datoteka treba da bude sto manje zavisna od drugih datoteka.
I zasto pozivati spoljne funkcije kada moze to da zavrisi sa 5 linija koda, i to istom brzinom kao dll.
Po meni VB je najjaci u manipulaciji stringovima i zato treba iskoristiti njegov potencijal.

P.S. Sta ce biti ako jednog dana ceo projekt zvani "WINDOWS" padne u vodu, i mi svi moramo da migriramo na neku drugu platformu. Da li cemo plakati za Win32 Dll bibliotekama zbog nase danasnje lenjosti da posao zavrsimo na svoj nacin!
Mislim da je resenje DLL korak u nazad za nekog ko vec nema logiku programiranja u glavi, dok ostalima samo ubrzava rad!

P.S.S. Jako me zanima tvoje misljenje o tome.

Pozdrav.


[Ovu poruku je menjao stefanpn dana 16.02.2008. u 02:57 GMT+1]
[ Aleksandar Ružičić @ 16.02.2008. 02:18 ] @
Citat:
stefanpn: ...ali izvrsna datoteka treba da bude sto manje zavisna od drugih datoteka.

slazem se, ali ne kada govorimo o vb programu, iz razloga sto najobicniji program u vb-u zavisi od nekoliko dll fajlova. da bi pokrenuo program pisan u vb6, moras da imas instaliran vb6 runtime na toj masini, jel tako? e a znamo da ovaj runtime nije dolazio uz windows sve dok windows-a 2000.
a u ovom primeru koji sam ja dao, pomenuta biblioteka dolazi sa windows-om jos od verzije 98, znaci i ako nemas vb6 runtime sigurno imas vbscript regular expressions.
druga stvar, svaki, ne samo vb program, nego i c, c++ i td, tj bilo koji windows izvrsni fajl mora da zavisi on nekih biblioteka (kernel32.dll, user32.dll itd), jer tako je windows osmisljen i to ima svojih prednosti ali naravno i mana. nama ne vredi da se bunimo nego radimo sa tim sto nam je ponudjeno i da to na najbolji nacin iskoristimo.

Citat:
I zasto pozivati spoljne funkcije kada moze to da zavrisi sa 5 linija koda, i to istom brzinom kao dll.

ok u ovom slucaju je sasvim ok koristiti tvoj kod, ali ja sam rekao "najelegantnije" resenje, a i koristeci regularne izraze dobija bolju prosirivost, tj ako kasnije hoce, recimo da string "TheEndIsClose" zameni sa "Close Is The End" tj da doda razmake i jos da obrne redosled reci ovo moze da uradi sa jednostavnom izmenom regularnog izraza i ubacivanja dodatnih povratnih referenci u replace with stringu (znaci broj linija ostaje isti, samo se dve linije dopunjuju)

Citat:
P.S. Sta ce biti ako jednog dana ceo projekt zvani "WINDOWS" padne u vodu, i mi svi moramo da migriramo na neku drugu platformu. Da li cemo plakati za Win32 Dll bibliotekama zbog nase danasnje lenjosti da posao zavrsimo na svoj nacin!

to jednostavno nece nikad biti, ali da cemo morati da menjamo aplikacije, tj da ih prilagodjavamo novim verzijama windowsa to je sasvim normalno...
a i jedan od razloga zasto je uradjen koncept dll (dynamic link library) je upravo zbog portabilnosti koda izmedju razlicitih verzija windowsa

Citat:
Mislim da je resenje DLL korak u nazad za nekog ko vec nema logiku programiranja u glavi, dok ostalima samo ubrzava rad!

kad smo vec kod logike da se malo osvrnemo na tvoj kod, jako me interesuje da mi objasnis zasto u prvoj liniji dodajes vrednost povratnoj vrednosti funkcije, iz razloga sto je na pocetku izvrsavanja funkcije ta promenljiva (fncUbaciSpace u tvom slucaju) initializovana na pocetnu vrednost tipa funkcije (u ovom slucaju inicijalizovana je na vbNullString), naravno vb ce ovo verovatno da optimizuje tako da nece biti razlike u izvrsnom fajlu, ali u izvornom kodu, tj logici ostaje (sto je malo nelogicno)
drugo, nisi deklarisao promenljivu t (ok verovatno ti je promaklo)
trece, jeste da je u pitanju malo parce koda ali ima par mesta na kojima bi kod mogao da se optimizuje (recimo, dva puta "cupas" karakter iz stringa, iako bi brze bilo da to radis jednom i da tu vrednost zapises u nekoj promenljivoj)

Pozdrav.


p.s. nemoj da mislis da te napadam sa ovim komentarima o kodu, ali kad si vec pomenuo logiku morao sam nesto da napisem :)
[ stefanpn @ 16.02.2008. 02:43 ] @
Ma taman posla da me napadas!
Ja mislim da smo svi mi ovde da bi nesto naucili ili bar da bi pomogli drugima da nesto nauce.

1. Posto je ovo mali kod promenljiva t nije deklarisana jer je ja u svakom svom programu u deklaracijama deklarisem kao integer i sluzi mi kao Temp promenjiva za for petlje.

2. Kod nije optimizovan jer sam ga pisao oko 15 sec. (Ali 100% si u pravu si oko toga)

3. Znam odlicno da svaki Win32 exe zavisi od Win core-a (kernel32, user32 i sl.). VB je jos gori zbog Runtime-a

4. Sta da ti dodje zadatak da se pise program za X-BOX kome je jezgro Windows 2000 bez API-ja i Desktop-a, nema IE-a 5.5.

5. Nisam ni ja tebe zeleo da prozovem, izvini ako si se osetio prozvanim.

6. Samo sam hteo da kazem da bi momku koji je postavio mozda bolje bilo da nauci kako to da odradi sam.

7. Mislim da Ubuntu Linux strahovito brzo napreduje ka svima, a Vista je po meni potpun promasaj jer sem podrske za vise od 4GB Ram-a (Ultimate) i Lepe grafike ne nudi nista vise. Cak i ako su odradili DX10 samo za Vistu to im nije pomoglo. Ljudi koji su kupili PC-je sa legalnom Vistom mahom su je zamenili za XP sa budjavog PRINCO diska.

Za 7. stavku sam samo hteo da kazem da je sve moguce...

Pozz. I sve najbolje u radu.

[Ovu poruku je menjao stefanpn dana 16.02.2008. u 04:08 GMT+1]
[ Aleksandar Ružičić @ 16.02.2008. 16:29 ] @
1. ok rekao sam da si verovatno zaboravio da je deklarises (licno mi se ne svidja taj tvoj nacin da deklarises promenljivu kao globalnu samo da bi ti koristila kao brojac u petljama, ako je deklarises kao lokalnu dobijas vec brzu - teoretski, u praksi je retko kad primetno, iz razloga sto se lokalne promenljive nalaze na steku u frejmu funkcije i mnogo je brzi pristupiti njoj nego promenljivoj koja je deklarisana kao globalna i nalazi se u heap memoriji)

2. razumemo se

3. gori ili ne takav je :)

4. onda sigurno ne bi pisao program u vb-u :p

5. naravno da se nisam osetio prozvanim, diskutujemo samo

6. ne sumnjam ja da bi se The End snasao i da mu mi nismo pruzili nekoliko resenja, ja sam lepo rekao da je to po meni najelegantnije resenje

7. dobar je ubuntu (mada ja koristim Kubuntu), ali Vista nikako nije za potcenivanje, sacekaj da malo prodje vremena pa ces videti. koliko god da linux-i budu napredovali u odnosu na windows (iako je to samo prividno, windowsov kernel je daleko ispred linux kernela) i koliko god da windows bude bio zahtevan i skup uvek ce moja primarna masina biti ona sa windows-om (naravno, tad cu se valjda zaposliti pa necu morati pirate da koristim) a linux bih koristio (kao i do sad) samo ako treba neki cross-platform programcic da iskompajliram za linux...


i da se osvrnem na tvoju predhodnu poruku, gde si rekao da je VB6 dobar u radu sa stringovima: tu se ne slazem sa tobom iz sledecih razloga:

1. sve operacije sa stringovima su dosta spore (jedan od razloga je sto je vb-ov string ustvari wide-string, tj unicode string)
2. nema ugradjene regularne izraze, sto je najmocnije oruzje u baratanju sa tekstom (da nije tako, ne bi regexp bio ukljucen u .net-u)
3. opet pod 1. :)
[ stefanpn @ 16.02.2008. 18:38 ] @
Razumemo se mi skroz...

Samo kada sam rekao da je VB dobar sa stringovima mislio sam na to da ima puno funkcija za manipulaciju stringovima, a ne na to koliko ih brzo obradjuje. :)

I ne zelim da ova diskusija preraste u to sta je bolje Windows ili Linux. (Hajde da otvorimo novu temu :) )
Po meni oba dva poticu od UNIX-a (to je samo moje misljenje)
Linux je direktan naslednik / kopija.
Dok je Windows stvoren pod uticajem UNIX-a.

Sto se kernela tice, ja bas i ne vidim zasto je Win kernel bolji od Linuxovog.
To je kao: Zvezda ili Partizan

Mada sto se tice Viste, ja sam se bunio i kad se pojavio XP, ali sad sta je tu je.

Mala sala:

Windows je pun rupa, a Linux je jedna velika rupa

Ovo je samo sala, ja bas i ne mislim tako...
[ Shadowed @ 16.02.2008. 19:18 ] @
Pa, i nema bas neko bogatstvo funkcija za rad sa stringovima. Eto, nema ni obican insert.
A sto se brzine tice, tu je drugi problem, u nacinu na koji se interno radi sa istima, mnogo se kopiraju po memoriji. To je slucaj i sa .net-om (nezavisno od jezika, pa su zato napravili StringBuilder klasu).
[ stefanpn @ 16.02.2008. 23:22 ] @
Istina nema insert

ali:
Code:

Private Sub Command1_Click()
    test = fncInsertStr("Ovo string", "je ", 4)
    Me.Caption = test
End Sub
Public Function fncInsertStr(ByVal str1 As String, ByVal str2 As String, ByVal int1 As Integer)
    Dim Deo1 As String
    Dim Deo2 As String
    Deo1 = Left$(str1, int1)
    Deo2 = Mid$(str1, int1+1, Len(str1))
    fncInsertStr = Deo1 & str2 & Deo2
End Function


Ovim kodom ne pokusavam nista da dokazem, samo vi izgleda niste shvatili na sta sam ja od pocetka ciljao.

Kazem samo da bi mozda za ljude koji tek pocinju da uce VB ili bilo koji drugi prog. jezik mozda bolje bilo da neke ovako jednostavnije probleme resavaju sami, pre nego sto potegnu za nekom bibliotekom. Jer ako ikad budu migrirali na drugi OS i tamo te biblioteke nema onda ce im se DLL obiti o glavu.

Pozdrav svima.

[Ovu poruku je menjao stefanpn dana 17.02.2008. u 00:57 GMT+1]
[ Aleksandar Ružičić @ 17.02.2008. 07:32 ] @
ma shvatam ja na sta si ti ciljao, ali cinjenica je da programeru pocetniku ni na kraj pameti nisu druge platforme dok se jos uci, evo ja kada sam pocinjao koristio sam razne biblioteke i ocx-ove masovno, a kasnije kako sam se uhodao poceo sam sve manje da koristim tudji kod, a kasnije sam veoma lekao presao i na neke druge jezike (posto sam ucio u vb-u) i na druge platforme (linux). a ono sto mi je pomoglo u pocetku su upravo bile razne biblioteke koje su mi olaksavale posao i ubrzavale rad, koristio sam ja regularne izraze odavno, tj bas ovu biblioteku a kad sam vec malo "stasao" kao programer, tj kad sam naucio dosta toga onda sam pokusao da napravim svoju implementaciju regularnih izraza (radio sam u freebasicu) i uspelo mi je (naravno nije bila kompletna implementacija, samo su | ? + * [] () bili podrzani, bez lookahed i lookbehind karaktera, povratnih referenci i ostalih egzoticnih stvarcica)
[ stefanpn @ 17.02.2008. 14:30 ] @
Mogli bi da zapocnemo temu FreeBasic, jer i mi je jako interesantan pogotovu Cross-compile. Evo ja otvaram diskusiju...
[ Aleksandar Ružičić @ 18.02.2008. 12:25 ] @
pa otvori novu temu, ne ide da u temi "ubacivanje razmaka" pisemo o freebasicu :)

inace ja sam presao na D koji je c-like (najvise zbog oop-a, tj zbog toga sam se zainteresovao a otkrio sam da je u pitanju jedan odlicno dizjaniran jezik), mada i dalje uradim nesto u fb-u kada mi treba neko quick & dirty resenje :)

[edit: sad videh da si vec otvorio novu temu]