Einzelnen Beitrag anzeigen

Mirco

Registriert seit: 7. Mai 2006
71 Beiträge
 
#1

Text aus Textdatei in TEDIT auslesen und wieder speichern

  Alt 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
  Mit Zitat antworten Zitat