Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi replace(all) ? (https://www.delphipraxis.net/11628-replace-all.html)

civilcrucher 10. Nov 2003 20:47


replace(all) ?
 
Ich grüße Euch!

Ich habe folgendes Problem:

Ich möchte Temperaturen aus einer Datei in ein Memofeld laden. Diese Daten muss ich dann Formatieren, so das die Werte untereinander und nicht Hintereinander stehen.

Delphi-Quellcode:
vorher

"Meßprotokoll AD-USB 4"
"Seriennummer 4"
"Beginn 10.11.2003 13:45:34"
" "
"Nr;Datum Uhrzeit;AI0;AI1;AI2;AI3;AI4;AI5;AI6;AI7;DI0;DI1;DI2;DI3;DI4;DI5;DI6;DI7;"
"1;10.11.2003 13:45:35;-5,0719;-1,6563;-1,0885;-0,2155;-0,8426;-0,0774;-0,2419;0,0205;11111111;"
Delphi-Quellcode:
nachher

"Meßprotokoll AD-USB 4"
"Seriennummer 4"
"Beginn 10.11.2003 13:45:34"
" "
Nr
Datum Uhrzeit
AI0
AI1
AI2
AI3
.
.
.

Mit einem Zeichen ändern klappt das auch Prima. Nur Muss er hat viele Sachen ändern und ich wäre über ratschläge Dankbar. Habe mal das bisherige mal mit angehängt. Ich habe mir auch schon diesen stringreplace Befehl angeschaut, nur kapier ich den noch nicht so richtig. Komme nicht mit der Flag Einstellung klar.

Versucht es aber bitte nicht zu kompliziert zu machen, sonst steig ich nicht mehr hinterher. Bin schliesslich noch Angänger in Delphi ;)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Clear;
memo1.Lines.LoadFromFile('werte\text.txt');

  with TReplaceDialog(Sender) do
    begin
      FindText:=';';
      ReplaceText:=#13#10;
      SelPos := Pos(FindText, Memo1.Lines.Text);
      if SelPos > 0 then
        begin
          Memo1.SelStart := SelPos - 1;
          Memo1.SelLength := Length(FindText);
          Memo1.SelText := ReplaceText;
        end
      else MessageDlg(Concat('Could not find "', FindText, '" in Memo1.'), mtError, [mbOk], 0);
    end;

end;

Luckie 10. Nov 2003 20:50

Re: replace(all) ?
 
Ersätze doch die mit StringReplace die ";" durch #13#10. Das müsste es doch schon gewesen sein oder?

civilcrucher 10. Nov 2003 21:09

Re: replace(all) ?
 
EDIT <<< Dieser Teil wurde von civilcrucher wegen Dummheit gelöscht >>> /EDIT

Leider verstehe ich den StringReplace-Befehl noch nicht wirklich und die OH hilft mir leider auch nicht weiter. :(

"Flags: TReplaceFlags" Was verlangt er denn hier für eine Eingabe?!?

BungeeBug 10. Nov 2003 21:19

Re: replace(all) ?
 
Hi,

ich denke mal das es so geht

Delphi-Quellcode:
StringReplace(<alterString>,<neuerString>,rfReplaceAll AND rfIgnoreCase);
So hab ich zumdest beim schnellen Lesen in der Refernz verstanden ....

SirThornberry 10. Nov 2003 21:22

Re: replace(all) ?
 
fast richtig (wenn mich mein Erinnerungsvermögen nicht täuscht)
Delphi-Quellcode:
StringReplace(<alterString>,<neuerString>,[rfReplaceAll,rfIgnoreCase]);

civilcrucher 10. Nov 2003 21:41

Re: replace(all) ?
 
Ahhh... Vielen Dank, Nun funktioniert es! :)

:love: :dp: :love:

civilcrucher 11. Nov 2003 14:56

Re: replace(all) ?
 
Hmm... ich hänge gerade mit meinem Programm. Ich poste das einfach mal hierrein, da es eigentlich noch hier reingehört. Sollte das nicht mehr der Fall sein, kurze Nachricht an mich und ich Poste es in einen neuen Thread.

Also, die Aufgabe meines Programms müsste ja mittlerweile klar sein.

Folgendes Ausgangsmaterial nochmal zur Veranschauung

"Meßprotokoll AD-USB 4"
"Seriennummer 4"
"Beginn 10.11.2003 13:45:34"
" "
"Nr;Datum Uhrzeit;AI0;AI1;AI2;AI3;AI4;AI5;AI6;AI7;DI0;DI1;DI2;DI3;DI4;DI5;DI6;DI7;"
"1;10.11.2003 13:45:35;-5,0719;-1,6563;-1,0885;-0,2155;-0,8426;-0,0774;-0,2419;0,0205;11111111;"

Diese digitalen Eingänge (DI1-DI7) werden in einem Feld angezeigt. Diese muss ich auflösen in jeweils eine Zeile.

1
1
1
.
.

Da hier nur jeweils 1 oder 0 kommen kann, müsste das doch zu machen sein, oder? Nur leider sind meine Kenntnisse noch nicht groß genug um das hinzubekommen. Evtl. wäre auch schon nen Tipp für nen Befehl super. Finde nämlich irgenwie gar nix.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.Lines.Clear;
memo1.Lines.LoadFromFile('werte\text.txt');

end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Text:=StringReplace(Memo1.Text,';',#13#10,[rfReplaceAll,rfIgnoreCase]);
Memo2.Text:=StringReplace(Memo1.Text,'"','',[rfReplaceAll,rfIgnoreCase]);

Label1.Caption:=Memo2.Lines.Strings[0];
Label2.Caption:=Memo2.Lines.Strings[1];
Label3.Caption:=Memo2.Lines.Strings[2];

zei:=0;
i:=4;

  while zei<Tabelle1.RowCount do begin
    sp:=0;
    while sp<tabelle1.ColCount do begin
      Tabelle1.Cells[sp,zei] := Memo2.Lines.Strings[i];
      i:=i+1;
      sp := sp+1;
    end;
    i := i+1;
    zei := zei+1;
  end;
end;
Das ist zwar kein soooo schöner Quelltext, aber um zu verdeutlichen wie es derzeit bei mir läuft.

civilcrucher 12. Nov 2003 20:20

Re: replace(all) ?
 
So, ich habe mein Problem jetzt gelöst. Falls jemand mal ein ähnliches Problem hat, poste ich hier mal meine Lösung.

Delphi-Quellcode:
memo1.Lines.Clear;
memo1.Lines.LoadFromFile('werte\text.txt');
Memo1.Text:=StringReplace(Memo1.Text,';',#13#10,[rfReplaceAll,rfIgnoreCase]);
Memo1.Text:=StringReplace(Memo1.Text,'"','',[rfReplaceAll,rfIgnoreCase]);
i:=33;
while Memo1.Lines.Strings[i] <> '' do begin
  search:=FormatFloat('0/0/0/0/0/0/0/0',StrToInt(Memo1.Lines.Strings[i]));
  Memo1.Text:=StringReplace(Memo1.Text,Memo1.Lines.Strings[i],search,[rfIgnoreCase]);
  Memo1.Text:=StringReplace(Memo1.Text,'/',#13#10,[rfReplaceAll,rfIgnoreCase]);
  i:=i+19;
  end;

Memo1.Text:=StringReplace(Memo1.Text,'/',#13#10,[rfReplaceAll,rfIgnoreCase]);
Ich hoffe mal, jemand kann was damit anfangen. Ist nicht perfekt, funktioniert aber in meinem Fall ohne Probleme.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz