![]() |
Problem mit POS und COPY
Hallo alle zusammen.
Ich habe ein kleines Problem. Ich habe in einer whatever.txt file einen beliebigen text stehen. Bsp: "Alle meine Entcheeeeeeen Schwimmen in einem Seeeeeeee" Ich versuche nun aus dem Text alle e's rauszusuchen mein code zeigt aber nur 2 gefundene e's in Zeile 1 und Zeile 2 ich hab keine ahnung wie ich es schaffe alle e's zu lesen Habs mit einer schleife probiert, hat aber nicht geklappt :gruebel: Der folgende source funktioniert... findet aber nur immer 1 string in 1 zeile Kann mit da jemand unter die arme greifen? Vielen Dank schonmal im voraus! :cheers:
Delphi-Quellcode:
procedure TForm1.SuchButtonClick(Sender: TObject);
var temp :string; such :string; result :array[0..100] of string; i, j, anf, lang: integer; begin such:=edit1.Text; Reset(Txt); i:=0; j:=0; While not EOF(txt) do begin ReadLN(Txt, temp); lang:=length(such); anf:=pos(such, temp); if anf <> 0 then begin result[i]:=copy(temp, anf, lang); memo2.lines.add('Gefunden in Zeile '+inttostr(j)+'); inc(i); end; inc(j); end; end; |
Re: Problem mit POS und COPY
Hi Trax,
ich hab mal deinen Code kurz überflogen aber nicht alles: Also pos gibt dir immer die Position von dem ersten Substring aus dem String aus. Alle weiteren ignoriert er. Aber du könntest mit einer for Schleife die Strings selber analysieren. Pseudocode nicht getestet!!!:
Code:
for i:=0 to length(deinstring) do //deinstring wird mit Readln ausgelesen
begin if uppercase(deinstring[i]) = uppercase('e') then //uppercase nur um GROß kleinschreibung ...mach irgendwas wie z.B. ausgeben oder so... //zu ignorierern. end; |
Re: Problem mit POS und COPY
Hiermit ...
Delphi-Quellcode:
... schreibst du jedesmal exakt deinen Suchstring in result[] (wenn er gefunden wurde). Ist das Absicht?
lang:=length(such);
anf:=pos(such, temp); if anf <> 0 then begin result[i]:=copy(temp, anf, lang); Dein memo2...-Befehl ist fehlerhaft (hinten bei der Klammer). Schau mal, ob du mit PosEx() etwas anfangen kannst. |
Re: Problem mit POS und COPY
Zitat:
nur so weiß ich wie ich das am ende ins memo schreiben kann :D ansonsten das mit dem memo stimmt ich hab meinen result text am ende falsch "gekürzt" mit PosEx() kann ich noch nichts anfangen ich werd aber mal in die help schauen, obwohl die leider auf englisch ist :( |
Re: Problem mit POS und COPY
Hai Trax,
ich habe das eben mal so gemacht:
Delphi-Quellcode:
Benötigt werden: 1xButton, 1xEdit ein 1xMemo und 1xOpenDialog
procedure TForm1.Sucheeee(datei, suchwort: string; var mem: TMemo);
var sl: TStringList; ndx: Integer; position: Integer; tmpstr1: string; begin sl := TStringList.Create; try sl.LoadFromFile(datei); // Datei laden for ndx := 0 to sl.Count - 1 do //alle Zeilen des Textes durchgehen begin tmpstr1 := sl.Strings[ndx]; position := 0; // solange noch Text in der aktuellen Zeile ist der dem suchwort // entsprächen könnte suche weiter while (length(tmpstr1) > (Length(suchwort))) do begin if (copy(tmpstr1, 1, Length(suchwort)) = suchwort) then //vergelichen begin mem.Lines.Add(Format('Suchwort gefunden Zeile %d an position %d', [ndx + 1, position + 1])); end; Delete(tmpstr1, 1, Length(suchwort)); INC(position,Length(suchwort)); end; end; finally FreeAndNil(sl); end; end; procedure TForm1.Button1Click(Sender: TObject); begin if (OpenDialog1.Execute) then begin Sucheeee(OpenDialog1.FileName, Edit1.Text, memo1); Application.ProcessMessages; end; end; |
Re: Problem mit POS und COPY
Zitat:
|
Re: Problem mit POS und COPY
Danke für die vielen Antworten vor allem auch an Sharky für eine Lösung
aber ich MUSS das leider mit POS machen und ich bin leider nicht in der lage aus der lösung eine auf meinen code funktionierende lösung zu machen :wall: mein code bearbeitet/behandelt ja jede zeile als einen einzigen string wie ist es möglich, diesen konkreten string, nachdem schon 1 gesuchter begriff gefunden wurde, zu einer art "RestString" zu machen um dann diesen "rest"lichen Bereich des Strings zu durchsuchen? denn anders wüsste ich nicht wie es theoretisch gehen sollte :( danke schon mal an alle :angle2: |
Re: Problem mit POS und COPY
Zitat:
Versuche es zu verstehen und probiere es aus (auch die Lösungsvorschläge hier). Das ist quasi das kleine 1 x 1 der Stringbearbeitung. Es zu erlernen bringt dir mehr, als hier auf eine perfekt passende Copy&Paste-Lösung zu warten. |
Re: Problem mit POS und COPY
hi
also unter PosEx finde ich in meine delphi hilfe (6) nichts könntest du mir ein anwendungsbeispiel geben. es ist mir immer noch nicht gelungen dies umzusetzten :( bin für jede hilfe dankbar |
Re: Problem mit POS und COPY
nen kleines Anwendungsbeispiel
Delphi-Quellcode:
mit
var deinString: String;
begin deinString := 'abcd abcde abcde';
Delphi-Quellcode:
bekommst du immer 1 zurück weil pos immer ganz vorne im string anfängt zu suchen und "abc" an position 1 vorkommt. Wenn du jetzt aber
foundpos := pos('abc', deinString);
Delphi-Quellcode:
schreibst so wird an position 2 deines strings angefangen zu suchen und somit wird "6" als ergebnis zurückgeliefert.
foundpos := posEx('abc', deinString, 2);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz