Search og Replace med SynEdit

Tags:    delphi

<< < 12 > >>
Jeg må desværre erkender at jeg ikke helt kan følge med i Search og Replace demoen til Synedit og er derfor helt lost om hvordan jeg skal lave de to ting.

Så mit spørgsmål om der er nogen der kan forklare hvordan?



15 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Shafh, slå Pos funktionen op.



Hej Shafh

Misforstå mig ikke. Det er ikke for at klantre dig at du er uerfaren. Det var jeg også da jeg startede.. :-)

Jeg siger blot at man lærer rigtig rigtig meget ved at prøve lidt mere selv.

Jeg er ret sikker på, at du skal kombinere adskillige teknikker for at opnå det du gerne vil...

Jeg kunne allerbedst forestille mig, at synEdit understøtter muligheden for at markere tekst i linie x, placering y og z bogstaver(tegn) frem.

Derfor må du kombinere den viden, med brugen af andre metoder. Som f.eks. pos.

Pos er en metode der returnerer dig et heltalt. helt præcist returnerer den POSitionen af den substreng du søger efter.

Altså hvis du har s, der er en string, ser den måske ud som: 'Jens Hansen har en bondegård'. Der er altså i dette tilfælde 28 tegn (fandt jeg med length(s)), det første tegn er 'J', fandt jeg ved s[1], bemærk at strenge er 1-indexeret og ikke 0 indexeret som stort set alt andet.
bogstavkombinationen 'en' optræder i POSition 2 af strengen:

i := Pos('en', s);

i er i dette tilfælde 2 fordi 'en' optræder i strengens anden position.

Hvis synEdit er til at highlighte ting, vil jeg som sagt tro at der er en metode til at angive linie nummer og karakter nummer samt et antal.

Håber det hjælper dig lidt mere... Men husk at kombinere den viden du opnår.

/Jens

Selvfølgelig har jeg forståelse for at du som nybegynder/mindre erfaren spørger.... Men det er fjollet hvis du slet ikke selv prøver..... ;-)






Nu kender jeg ikke Synedit, men der findes en almindelig Delphi funktion der hedder StrReplace eller StringReplace eller sådan noget.
Den tager en streng, en søgestreng og en replace streng med som parametre, så f.eks. (Jeg har ikke en Delphi på denne maskine, så muligvis er syntaksen i skoven...

Fold kodeboks ind/udKode 


Giver outputtet: 'Jens Nielsen har en bondegård'.





[Error] Unit1.pas(29): Undeclared identifier: 'StrReplace'



Man kan i Delphi benytte sig af et hav funktioner, rutiner, klasser og meget meget mere.... Hvis man blot inkluderer den unit hvori de er defineret.

Hvis du skriver StrReplace i din editor, stiller cursoren derpå, og trykker F1, kommer hjælpen frem.

Heri kan man på en given funktion se hvilken unit den er defineret. StrReplace er såvidt jeg husker defineret i SysUtils uniten, men jeg er ikke 100% sikker. Jeg er heller ikke 100% sikker på at den overhovedet hedder StrReplace, men jeg mener det.

For at inkludere en unit tilføjer du unitens navn til uses klausulen i din egen unit.

Næste udtalelse kan tages negativt, men jeg forsikrer dig, det er ment i allerbedste mening, som et godt råd:
Du ville lære utroligt meget omkring programmering, hvis du selv prøvede at finde svarene på dine spørgsmål nogle gange.
Jeg ved godt at det kan være uoverskueligt ind imellem, og man af den årsag nemt kommer til at tænke "jeg spørger lige på udvikleren"....

Prøv lige at sætte dig ind i hvordan hjælpen i Delphi virker, og så gør dig til en vane at slå op i den. Jeg forsikrer dig, der står virkelig meget i Delphi's hjælp. Ofte efterfulgt af et eksempel hvor metoden er benyttet.

Men som sagt, tror jeg nu at StrReplace er defineret i SysUtils.pas

Håber det hjælper dig

/Jens





Nå... Nu slog jeg alligevel op for dig

StringReplace fremfor StrReplace er defineret i SysUtils, og SysUtils er allerede inkluderet i din units uses klausul hvis det foregår i/på en form.

/Jens



Skriver jeg:
StringReplace('Jens Hansen har en bondegård', 'Hansen', 'Nielsen');

giver det denne fejl:
[Error] Unit1.pas(1632): Not enough actual parameters


Gjord som du har sagt og trykket f1 og den uddyber og viser et eksempel at der mangler et "," og endnu en information. Meget mystisk!



Hej...

Nej, det er såmend ikke mysktisk.. Det betyder blot at jeg ikke kan huske den præcise signatur af alle funktioner i Delphi..

Ja... Not enough actual parameters betyder ganske rigtigt at du ikke har givet den nok parametre....

Nu kunne jeg jo være ond, og fortælle dig, at i hjælpen står der desuden også, hvis du slår op på funktionen StringReplace hvad den manglende parameter er... :)

Hvis du begynder at skrive i parantesen med parametre, kommer der hints. Ellers kan du fremprovokere dem ved ctrl-shift-space..

Den manglende parameter er Flags, af typen TReplaceFlags.
Igen tyer vi til Delphis hjælp og finder ud af at der er en definition i SysUtils.pas der ser således ud:
type TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);
Så det betyder at din manglende parameter er et sæt.
Du kalder den altså således:

Fold kodeboks ind/udKode 


Hvis du vil erstatte ALLE forekomster af Hansen med Nielsen, og hvis du er ligeglade med store/små bogstaver.

Den bageste parameter består af [] hvor du kan have 0, 1 eller begge muligheder med.

Håber det hjælper dig.

/Jens





Kanon hva med Search? :S



Det man erstatter, kan man også give det en ny tekstfarve? Fx. hvis jeg erstatter "farve" med "rød", kan den så skrive "rød" med en rød tekstfarve?



<< < 12 > >>
t