Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pretraga teksta, ograničenje memorije itd. - pitanja

[es] :: Visual Basic 6 :: Pretraga teksta, ograničenje memorije itd. - pitanja

[ Pregleda: 4683 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Pootneek
Bar

Član broj: 7292
Poruke: 35
*.crnagora.net

Sajt: visual.users.cg.yu


Profil

icon Pretraga teksta, ograničenje memorije itd. - pitanja17.07.2004. u 20:57 - pre 240 meseci
Pozdrav,

Da li neko zna za jednostavniji način pretrage teksta u VB sem funkcije InStr; u vezi sa ovim, može li mi neko objasniti kako radi Filter funkcija?

Da li postoji ograničenje veličine vrijednosti u String, tj. da li je myString (Dim myString as String) ograničeno samo memorijom računara?

Uzgred, bacite pogled na screenshotove programa na kojem radim:

http://visual.users.cg.yu/vb/screen.htm

Thank you!
 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.bg.wifi.vline.verat.net.

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Pretraga teksta, ograničenje memorije itd. - pitanja18.07.2004. u 10:27 - pre 240 meseci
Filter function

The Filter function allows you to search an array for all strings that match (or don't match) a set of criteria. The function returns a variant array with the results. This code snippet demonstrates the use of this function.

Code:

   Dim a_strTest(1 To 10) As String
   Dim a_strResult As Variant
   Dim i As Integer
   
   For i = 1 To 10
      a_strTest(i) = "Value " & i
   Next i
   
   a_strResult = Filter(a_strTest, "5")
   
   For i = 0 To UBound(a_strResult)
      Debug.Print a_strResult(i)
   Next i


The Filter function is being used here to only return strings with a 5 in them. The results of this code are to print "Value 5" and nothing else. The return variable has to be a Variant, but you can use the Ubound function to return the upper bound of this zero-based array. This function also has the ability to either match or ignore the case of the characters in the string.

Vise informacija o Filter funkciji mozes naci ovde


Citat:
MSDN:

String Data Type

There are two kinds of strings: variable-length and fixed-length strings.

• A variable-length string can contain up to approximately 2 billion (2^31) characters.

• A fixed-length string can contain 1 to approximately 64K (2^16) characters.

Note: A Public fixed-length string can't be used in a class module.

The codes for String characters range from 0–255. The first 128 characters (0–127) of the character set correspond to the letters and symbols on a standard U.S. keyboard. These first 128 characters are the same as those defined by theA SCII character set. The second 128 characters (128–255) represent special characters, such as letters in international alphabets, accents, currency symbols, and fractions. The type-declaration character for String is the dollar sign ($).


 
Odgovor na temu

HiveFive
Beograd

Član broj: 30453
Poruke: 16
*.smin.sezampro.yu.



Profil

icon Re: Pretraga teksta, ograničenje memorije itd. - pitanja19.07.2004. u 16:39 - pre 240 meseci
Kako mislis jednostavniji?
Mislim da je InStr vrlo jednostavan. Po meni kod InStr postavlja se pitanje brzine ali ni tu nije mnogo los.
Kako ti ustvari zamisljas pretragu?

btw naveden primer ima gresku. Trebalo bi
Code:

Dim a_strResult() As Variant

A i ne shvatam zasto bas mora Variant ali ajde.
Hello :)
 
Odgovor na temu

Pootneek
Bar

Član broj: 7292
Poruke: 35
*.crnagora.net

Sajt: visual.users.cg.yu


Profil

icon Re: Pretraga teksta, ograničenje memorije itd. - pitanja19.07.2004. u 19:34 - pre 240 meseci
Mladenovicz,

Hvala na odgovoru.

HiveFive,

Citat:
Kako mislis jednostavniji?
Mislim da je InStr vrlo jednostavan. Po meni kod InStr postavlja se pitanje brzine ali ni tu nije mnogo los.


Brzine? Ne znam, jeste da ima krs od masine (233 Cyrix, 32 MB) ali InStr je dosta brz i kad se radi sa vecom kolicinom teksta. Doduse, ja sam sa InStr napravio Search & Replace funkciju, sto mi je i bio cilj:

Code:
Public Function ProcessString() As String
    Dim Sln As Integer 'String length
    Dim FndStr As String 'String within original text
    Dim OrgText As String 'Original text var
    Dim PlcStr As Variant 'Place where string occurs
    Dim FinalStr As String 'Final string with replaced chrs
    Dim HadString As Boolean
    '
    OrgText = frmMain.txtDisplay.Item(Active).Text
    Sln = Len(frmMain.txtDisplay.Item(Active).Text)
    '
    '
    '
    For i = 1 To ArrayElNumber 'to number of array elements
        HadString = False
        PlcStr = InStr(1, OrgText, ArrayReplaceWhat(i))
        Do While Not PlcStr = 0
            PlcStr = InStr(1, OrgText, ArrayReplaceWhat(i))
            If PlcStr <> 0 Then
                HadString = True
                FinalStr = FinalStr & Mid(OrgText, 1, PlcStr - 1) & ArrayReplaceWith(i)
                OrgText = Mid(OrgText, PlcStr + Len(ArrayReplaceWhat(i)))
            End If
            '
            If PlcStr = 0 And HadString = True Then
                FinalStr = FinalStr & OrgText
                Exit Do
            End If
        Loop
    Next i
    '
    '
    '
    ProcessString = FinalStr
End Function


Sa vecom kolicinom teksta izlazna vrijednost je "", nisam jos siguran zasto.

Citat:
Kako ti ustvari zamisljas pretragu?


Naci String1 unutar String2? Ne znam kako drugacije....
 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.bg.wifi.vline.verat.net.

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Pretraga teksta, ograničenje memorije itd. - pitanja19.07.2004. u 19:51 - pre 240 meseci
Nemam sada vremena da se zadubljujem u ovaj kod, ali postoji funkcija Replace (ako bi ovaj kod trebalo da radi isto sto i ova funkcija).

Offtopic:
Ovaj kod radi i ovako, ali:

Code:

OrgText = frmMain.txtDisplay.Item(Active).Text


ovo bi trebalo da ti bude parametar funkcije. Zgodnije je parametrizovati funkcije, nego koristiti kontrole i promenljive na nivou modula unutar funkcije.
 
Odgovor na temu

HiveFive
Beograd

Član broj: 30453
Poruke: 16
*.ppp-bg.sezampro.yu



Profil

icon Re: Pretraga teksta, ograničenje memorije itd. - pitanja20.07.2004. u 15:51 - pre 240 meseci
:)) Nisam ja imao sumnje u InStr nego ti. Ti smatras da bi trebalo da postoji jednostavnije pretrazivanje stringova. A InStr upravo pretrazuje onako kako ti zamisljas da treba.

Za to sto radis mislim da je Replace funkcija dosta lakse resenje.

Zasto menjas OrgText? Lakse ti je a i brze ako samo menjas poziciju odakle trazis u stringu. Nesto ovako
Code:

Dim iPos as Long: iPos = 1
Do
  iPos = InStr(iPos, OrgText, "Pera Mika Zika")
  If (iPos > 0) then
    FinalStr = FinalStr & Mid$(OrgText, iPos, Len("Pera Mika Zika"))
    iPos = iPos + Len("Pera Mika Zika")
  End if
Loop While (iPos > 0)


Dalje probaj da koristis Mid$ umesto Mid citao sam negde davno da je Mid$ optimizovanije (valjda samim time sto vraca string a ne variant) nego Mid.

A ovo sto ti ponekad vraca "" je mozda zbog toga sto moze da ti se desi da nikad ne inicijalizujes FinalStr. Mozda bi mogao na kraju funkcije u slucaju da je "" da ga setujes na OrgText.
Hello :)
 
Odgovor na temu

Pootneek
Bar

Član broj: 7292
Poruke: 35
*.yu
Via: [es] mailing liste

Sajt: visual.users.cg.yu


Profil

icon Re: Pretraga teksta, ograničenje memorije itd. - pitanja21.07.2004. u 12:01 - pre 240 meseci
Zasto menjas OrgText? Lakse ti je a i brze ako samo menjas
poziciju odakle trazis u stringu. Nesto ovako
Code:

Dim iPos as Long


Da, u pravu ste, i ti i mladenovicz. Kod nije bas najbolji. Kad pisem
kod, radim to on-the-fly, prvo samo da proradi a poslije doradim.

H> :)) Nisam ja imao sumnje u InStr nego ti. Ti smatras da bi trebalo
H>da postoji jednostavnije pretrazivanje stringova. A InStr upravo
H>pretrazuje onako kako ti zamisljas da treba.

Mozda previse ocekujem od VB, da vec ima Serach & Replace? :)) Btw,
moje je misljenje da su VB programeri (mada sebe ne smatram
programerom) prilicno "razma�eni", jer raditi u VB je veoma prosto ;)
, ima olaksica na svakom koraku.

PS
Forum preko mailing lista ne funkcionise bas najbolje, ili mi se cini...
 
Odgovor na temu

HiveFive
Beograd

Član broj: 30453
Poruke: 16
*.ppp-bg.sezampro.yu



Profil

icon Re: Pretraga teksta, ograničenje memorije itd. - pitanja23.07.2004. u 15:18 - pre 240 meseci
Bacas flame-ove :)) ccc
Niko ovde nikog ne tera da koristi VB, covek jednostavno treba u zavisnosti od zadatka koji je dobio da izabere najbolje okruzenje u kome ce najlakse to odraditi.
Hello :)
 
Odgovor na temu

Pootneek
Bar

Član broj: 7292
Poruke: 35
213.149.123.*

Sajt: visual.users.cg.yu


Profil

icon Re: Pretraga teksta, ograničenje memorije itd. - pitanja08.01.2006. u 00:24 - pre 222 meseci
Posto mislim da je ovo korisna funkcija, evo "updejta" i verzije koja je trenutno u programu. Nije parametrizovana jer mi je nesto muka da to ispravim :)

Code:
Public Function ProcessString(OrgText As Variant) As String
'
'This is simple Search & Replace function.
'It uses OrgText to search for string that needs to be replaced.
'Strings that are to be replaced are stored in array:
'   ArrayReplaceWhat()
'Strings that are used for replacement are stored in array:
'   ArrayReplaceWith()
'
'
'Code by Mlinar R.
'
    Dim Sln As Integer 'String length
    Dim FndStr As Variant 'String within original text
    Dim PlcStr As Variant 'Place where string occurs
    Dim FinalStr As Variant 'Final string with replaced chrs
    Dim HadString As Boolean
    Dim BforeArrayString As Variant
    Dim Counter As Integer 'counter for replaced string
    '
    For i = 1 To ArrayMembers 'to number of array elements
        If ArrayReplaceWhat(i) <> "" Then 'Empty value isn't allowed. No point using it.
            HadString = False
            PlcStr = InStr(1, OrgText, ArrayReplaceWhat(i))  'First occurrence of the string
            Do While Not PlcStr = 0 'Search all text until string is NOT found
                PlcStr = InStr(1, OrgText, ArrayReplaceWhat(i))
                If PlcStr <> 0 Then
                    HadString = True 'We found our string
                    Counter = Counter + 1
                    BeforeArrayString = Left$(OrgText, PlcStr - 1)
                    FinalStr = BeforeArrayString & ArrayReplaceWith(i) & Mid$(OrgText, PlcStr + Len(ArrayReplaceWhat(i)))
                    'Since text is changed, pass its new value:
                    OrgText = FinalStr
                End If
            Loop
        End If
    Next i
    '
    'Extra code for the program:
    '    Display search info?
    If ReadIni("Options", "ShowReplaceInfo", Ini, Ini) = "1" Then
        Select Case Counter
        Case Is > 0
        MsgBox "Number of replaced string(s) is " & Counter & ".", vbInformation
        Case 0
        MsgBox "No strings to replace found.", vbInformation
        End Select
    End If
    ProcessString = OrgText 'Pass value into function variable
End Function


@Hive

Ok :) Necu nista da kazem sem da me sve vise interesuje Python :)
 
Odgovor na temu

[es] :: Visual Basic 6 :: Pretraga teksta, ograničenje memorije itd. - pitanja

[ Pregleda: 4683 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.