![]() |
Wort aus Textdatei laden
Hallo DP'ler,
Ich hab ein kleines Problem, beim "herausfiltern" eines Wortes aus einer Textdatei! Prinzip: 1) Textdatei in RichEdit laden 2) Einzelne Worte aus dem RichEdit in das Memo laden
Delphi-Quellcode:
procedure TfrmEditor.btnLadenClick(Sender: TObject);
begin IF OpenDialog.Execute THEN BEGIN RichEdit.Lines.LoadFromFile(OpenDialog.FileName); laden; END; end;
Delphi-Quellcode:
soweit so gut. Funktionier an sich auch wohl super. ABER!
PROCEDURE laden;
VAR name: String; BEGIN // Name name := frmEditor.mConfig.Lines[235]; Delete(name,1,Pos(#32,name)); name := trim(name); Delete(name,Pos(#32,name),Length(name)); frmEditor.edtName.text := name; END; Die Zeile aus dem Richedit sieht so aus: Zitat:
Zitat:
Das hat folgende Gründe: 1) Optisch ist das net so dolle 2) Beim Speichern erhalte ich dann folgende Zeile: Zitat:
|
Re: Wort aus Textdatei laden
Entferne doch mit StringReplace die Anführungszeichen einfach.
|
Re: Wort aus Textdatei laden
Hallo!!
Dann lass die Anführungszeichen beim Auslesen doch einfach weg:
Delphi-Quellcode:
.. oder gleich mit COPY(...)
PROCEDURE laden;
VAR name: String; BEGIN // Name name := frmEditor.mConfig.Lines[235]; Delete(name,1,Pos(#32,name)+1); // +1 name := trim(name); Delete(name,Pos(#32,name)-1,Length(name)); // -1 frmEditor.edtName.text := name; END;
Delphi-Quellcode:
Grüße,
PROCEDURE laden;
VAR name: String; BEGIN // Name name := copy(frmEditor.mConfig.Lines[235], pos('"', frmEditor.mConfig.Lines[235])+1, length(frmEditor.mConfig.Lines[235])); name := copy(name, 1, pos('"', name)-1); frmEditor.edtName.text := name; END; SCRaT |
Re: Wort aus Textdatei laden
Zitat:
Mit StringReplace geht das.
Delphi-Quellcode:
Allerdings ist der Lösungsvorschlag von scrat1979 kürzer und funktioniert ebenfals.
// Name
name := frmEditor.mConfig.Lines[235]; Delete(name,1,Pos(#32,name)); name := StringReplace(name, '"', '' , []); name := trim(name); Delete(name,Pos(#32,name),Length(name)); name := StringReplace(name, '"', '' , []); frmEditor.edtName.text := name; Aber kann man das ganze nun noch weiter kürzen? Sonst müsste ich allein den Code:
Delphi-Quellcode:
an die 30x haben, wegen der ganzen Variablen etc die ich laden möchte.
// Vorwärts
vor := frmEditor.mConfig.Lines[30]; Delete(vor,1,Pos(#32,vor)+1); vor := trim(vor); Delete(vor,Pos(#32,vor)-1,Length(vor)); frmEditor.edtVor.text := vor; |
Re: Wort aus Textdatei laden
Mach doch einfach 'ne Funktion draus, der Du die Zeilennummer übergibst und die Dir dann den gekürzten String zurückgibt.
|
Re: Wort aus Textdatei laden
... hab grad meinen Post oben noch editiert....
noch ein Tip für die häufige Nutzung:
Delphi-Quellcode:
Aufruf z.B. mit
function laden(Quelle : String) : String;
VAR temp: String; BEGIN temp := copy(Quelle, pos('"', Quelle)+1, length(Quelle)); temp := copy(temp, 1, pos('"', temnp)-1); result := temp; END;
Delphi-Quellcode:
... alles ungetestet!
frmEditor.edtVor.text := laden(frmEditor.mConfig.Lines[30]);
SCRaT |
Re: Wort aus Textdatei laden
Zitat:
Hm naja ich weiß gerade net so ganz, Deddy. Ab und zu muss ich ja net von der selben Stelle lesen |
Re: Wort aus Textdatei laden
Na, das ist doch fast das, was ich gesagt hatte, nur wird hier der komplette String übergeben, das geht natürlich auch.
|
Re: Wort aus Textdatei laden
Also, Danke nochmals!
Ich hab das mit der Funktion gemacht! Aber wie sieht das nun aus, wenn ich folgendes lesen möchte? Zitat:
Delphi Praxis ist super! Hinter say ist ein Leerzeichen, von da bis vor dem " am Ende. Hatte da erst an den alten Code gedacht:
Delphi-Quellcode:
Allerdings liest der dann nur das erste Wort "Delphi"
say1 := frmEditor.mConfig.Lines[315];
Delete(say1,1,Pos(#32,say1)+9); say1 := trim(say1); Delete(vor,Pos(#32,say1)-1,Length(say1)); frmEditor.edtSay1.text := say1; |
Re: Wort aus Textdatei laden
Das ist nun eine Sache des Eingangsformates. Dementsprechend müsstest Du die Funktion aufbauen. Wie kann so ein String denn aussehen, d.h. welche Randbedingungen sind vorgegeben?
|
Re: Wort aus Textdatei laden
Zitat:
Eigentlich nur, die unterschiedliche Länge! Sprich: Zitat:
Zitat:
|
Re: Wort aus Textdatei laden
Der Teil, der Dich interessiert, steht aber immer zwischen den letzten beiden Anführungszeichen?
|
Re: Wort aus Textdatei laden
Delphi-Quellcode:
Oder hab ich was übersehen?
StringReplace (aProblemString, '"', '', [rfReplaceAll]);
Jan -> Fettdruck in Delphitags scheint nicht zu klappen ;-) |
Re: Wort aus Textdatei laden
Zitat:
Allerdings ohne die ersten drei Buchstaben (say) Zitat:
|
Re: Wort aus Textdatei laden
Das Prinzip ist das selbe:
1. Kopiere String bis auf das letzte Zeichen (= Anführungszeichen) 2. Mit einer Schleife von HINTEN nach dem ersten Treffer auf Anführungszeichen testen 3. Den String von Position 2.) bis zum Ende Kopieren.... Fertig! ... so aus dem Kopf:
Delphi-Quellcode:
Vielleicht statt einer FOR-Schleife eine "while"-Schleife verwenden und damit break; vermeiden...
[...]
test := 'bind "o" "say Delphi Praxis ist super!"'; var2 := copy(test, 1, length(test)-1); for i := length(var2) downto 1 do if var2[i] = '"' then begin; zeichen := i; break; end; ergebnis := copy(var2, zeichen+1, length(var2)); SCRaT |
Re: Wort aus Textdatei laden
Und das Semikolon hinter dem begin weglassen :zwinker:
|
Re: Wort aus Textdatei laden
Stimmt auch wieder :-)
Aber Du solltest Dir - wie DeddyH es bereits gesagt hat - Gedanken über ein einheitliches Format zum einlesen machen. Das erspart Dir viel Ärger. Und zweitens solltest Du in diesem speziellen Falle die Anführungszeichen als Teil des auszulesenden Textes verbieten, sonst kommt es zu falschen "Werten". Möchtest Du die Zeichen auch erlauben, dann ist das Einlesen nicht mehr ganz so trivial und Du müsstest Dir einen Parser basteln... Grüße, SCRaT |
Re: Wort aus Textdatei laden
Zitat:
Ich hatte eigentlich nicht vor, das ganze Unterfangen komplizierter zu machen, als es schon ist. Ich bin noch dabei, das ganze mit dem Textauslesen etc so richtig zu kapieren.^^ |
Re: Wort aus Textdatei laden
Wie kann ich das denn am besten machen, wenn ich das ganze denn jetzt wieder in das RichEdit haben will?
Also ich lade ja ein Textdokument in das Richedit und dann die einzelnen Werte in die dazugehörigen Editfelder. Nachdem ich den Wert in dem Editfeld gespeichert habe, muss ich das ja wieder im RichEdit ändern. Bisher habe ich das so: EDIT: Habs hinbekommen. Ist nur die Frage, ob das ein "guter" Code ist:
Delphi-Quellcode:
Aufruf so:
function speichern(Zeile: Integer; Edit: TEdit; AltText: String; Befehl: String) : String;
var erg : String; begin erg := frmEditor.mConfig.Lines[Zeile]; IF (Edit.Text <> '') THEN BEGIN frmEditor.mConfig.Lines[Zeile] := ''; frmEditor.mConfig.Lines[Zeile] := AltText + Edit.Text + Befehl; END; end;
Delphi-Quellcode:
procedure TfrmEditor.btnOKClick(Sender: TObject);
begin speichern(30, edtVor, 'bind "', '" "+forward"'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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