Registriert seit: 7. Mai 2006
71 Beiträge
|
Text aus Textdatei in TEDIT auslesen und wieder speichern
2. Jun 2006, 14:23
Hallo
Ich komme einfach nicht weiter.
ich möchte Text aus bestimmten Bereichen einer Textdatei auslesen und in Edit's anzeigen und auch wieder speichern.
Das Auslesen und das Speichern klappt nicht ganz weil in dem ausgelesen Text ein Komma vorkommt.
So sieht die Textdatei aus
define('TEXT_MAINA', 'Test1, Test A, Test AB, <>,0');
define('TEXT_MAINB', 'Test2 , Test B, Test BA," ", 1');
Der gesuchte Text wäre dann:
Code:
Test1, Test A, Test AB, <>,0
Test2 , Test B, Test BA," ", 1
Hier der Sourcecode (Danke an s-off)
Delphi-Quellcode:
***** Einen String von bis extrahieren
function TForm1.ExtractString(sSource, sStart, sStop: string; a: Integer): string;
var
SubStr, bck: string;
Pos1, Pos2, i: Integer;
begin
i := 0;
while i < a do
begin
Pos1 := Pos(sStart, sSource);
Pos2 := Pos(sStop, sSource);
SubStr := Copy(sSource, Pos1 + Length(sStart), Pos2 - Pos1 - Length(sStart));
Delete(sSource, Pos1, Pos2 - Pos1 + Length(sStop));
if SubStr = '' then {nothing}
else if bck = '' then
bck := SubStr
else
bck := bck + #13#10 + SubStr;
i := i + 1;
end;
Result := bck;
end;
function TForm1.WhatsInBrackets(sString: string): string;
begin
Result := ExtractString(sString, '(', ')', 1);
end;
//Einen String parsen
function TForm1.ParseString(sTrenner, sString: string; iCount: Integer): string;
var
i: Integer;
sErgebnis: string;
begin
Result := '';
if Length(sString) > 0 then
begin
if sString[Length(sString)] <> sTrenner then
begin
sString := sString + sTrenner;
end;
for i := 1 to iCount do
begin
sErgebnis := Copy(sString, 0, Pos(LowerCase(sTrenner), LowerCase(sString)) - 1);
//showmessage(sErgebnis);
sString := Copy(sString, Pos(LowerCase(sTrenner), LowerCase(sString)) + 1, Length(sString));
end;
Result := sErgebnis;
end;
end;
Delphi-Quellcode:
//Auslesen
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
sEditBox: string;
sText: string;
comp: TComponent;
begin
memo1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName) + 'daten.txt');
for i := 0 to memo1.Lines.Count do
begin
if Pos('define', LowerCase(memo1.Lines.Strings[i])) > 0 then begin
sEditBox := ParseString(',', WhatsInBrackets(memo1.Lines.Strings[i]), 1);
sText := Trim(ParseString(',', WhatsInBrackets(memo1.Lines.Strings[i]), 2));
end
else Continue;
comp := FindComponent(StringReplace(sEditBox, #039, '', [rfReplaceAll]));
if comp <> nil then
begin
TEdit(comp).Text := (StringReplace(sText, #039, '', [rfReplaceAll]));
SetLength(aOldData, Length(aOldData) + 1); //Länge des Arrays um eins erhöhen
aOldData[Length(aOldData) - 1] := TEdit(comp).Name + ',' + TEdit(comp).Text; //Namen des Edits und alten Text speichern
end;
end;
end;
Delphi-Quellcode:
// Speichern
Code:
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
j: Integer;
EditText: String;
Edit: TComponent;
begin
for i := 0 to Length(aOldData) - 1 do begin //für alle Edits
Edit := FindComponent(ParseString(',', aOldData[i], 1)); //Finde Edit
EditText := ParseString(',', aOldData[i], 2); //wie ist der alte Text des Edits
for j := 0 to memo1.Lines.Count - 1 do begin //alle Zeilen des Memos durchgehen, so lange bis
if (Pos(Edit.Name, memo1.Lines.Strings[j]) > 0) and //der Editname gefunden wurde und
(Pos(EditText, memo1.Lines.Strings[j]) > 0) then begin //der alte Text gefunden wurde
memo1.Lines.Strings[j] :=
StringReplace(memo1.Lines.Strings[j], EditText, TEdit(Edit).Text, [rfIgnoreCase]);
//dann den alten Text durch den neuen ersetzen
aOldData[i] := TEdit(Edit).Name + ',' + TEdit(Edit).Text; //die alten Daten im Array aktualisieren
Break; //und mit der nächsten Schleife fortfahren
end;
end;
end;
memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName) + 'daten.txt'); //Memo in Datei speichern
end;
Ich hoffe es kann mir jemand helfen.
Grüsse Mirco
Mirco Hallenga
|