AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Text aus Textdatei in TEDIT auslesen und wieder speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Text aus Textdatei in TEDIT auslesen und wieder speichern

Ein Thema von Mirco · begonnen am 2. Jun 2006 · letzter Beitrag vom 4. Jun 2006
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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 by Thomas Breitkreuz