Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Textausschnitt in Edit's (https://www.delphipraxis.net/69532-textausschnitt-edits.html)

Mirco 16. Mai 2006 16:34


Textausschnitt in Edit's
 
Hallo

Ich habe folgendes Beispiel:

Delphi-Quellcode:
  for k := 0 to memo1.Lines.Count do
  begin
    feld := Copy(memo1.Lines.Strings[k], 2, Pos(' ', memo1.Lines.Strings[k]) - 2);
    comp := FindComponent(feld);
    if comp <> nil then
    begin
      cText := Copy(memo1.Lines.Strings[k], Pos('= "', memo1.Lines.Strings[k]) + 3, Pos('"; ', memo10.Lines.Strings[k]) - Pos('= "', memo1.Lines.Strings[k]) - 3);
      TEdit(comp).Text := cText;
Damit kann ich einzelne Bereiche aus einer Textdatei in Tedit's einlesen.
Die Namen der TEdit's müssen dann auch so heissen:
edit1 = c_firma -> wird Firma angezeigt
edit2 = c_vname -> wird Vorname angezeigt
edit3 = c_nname -> wird Nachname angezeigt
usw.

So schaut die Textdatei aus:

Delphi-Quellcode:
$c_knr = "Kundenummer"; /*Kundenummer*/
$c_firma = "Firma"; /*Firma*/
$c_vname = "Vorname"; /*Vorname*/
$c_nname = "Nachname"; /*Nachname*/
$c_str = "Strasse"; /*Strasse*/
$c_hnr = "Hausnummer"; /*Hausnummer*/
$c_plz = "PLZ"; /*PLZ*/
$c_ort = "Ort"; /*Ort*/
$c_land = "Land"; /*Land*/
$c_fon = "Telefon"; /*Telefon*/
$c_fax = "Fax"; /*Fax*/
$c_email = "Email"; /*Email*/

Ich habe dann versucht fogende Textdatei anzupassen (in Edit's anzuzeigen), kriegs nich hin.
Habe wahrscheinlich grundlegendes nicht verstanden, mag mir jemand dabei helfen?

Textdatei/Ausschnitt:

Code:
<?php
define('TEXT_MAINA', 'Test1');
define('TEXT_MAINB', 'Test2');
define('TEXT_MAINC', 'Test3');
define('TEXT_MAIND', 'Test4');

if ( ($new == 'files')...
   define('MAINE', 'Text');
   define('MAINF', 'Text1');
   define('MAING', 'Text2');
   define('MAINH', 'Text3');
   
   ...
Die Edit's heissen nun
TEXT_MAINA
TEXT_MAINB
TEXT_MAINC
usw.


Gruss Mirco

Mirco 16. Mai 2006 20:48

Re: Textausschnitt in Edit's
 
Hallo...
hab ich mich zu umständlich ausgedrückt?
Mirco

s-off 16. Mai 2006 20:49

Re: Textausschnitt in Edit's
 
Hallo,

meiner Meinung nach - ja :wiejetzt:

Edit: ok, habs verstanden - meld mich gleich wieder (vielleicht) ;)

Mirco 16. Mai 2006 20:55

Re: Textausschnitt in Edit's
 
Okay...wenn nich erklär ich gerne alles nochmal anders.
THX

s-off 16. Mai 2006 21:23

Re: Textausschnitt in Edit's
 
Die Funktion ExtractString(sSource, sStart, sStop: String; a: Integer): String; separiert einen Teilstring zwischen zwei Strings, hier '(' und ')'.
Damit hast Du den Teil aus den Klammern.

Mit der Funktion ParseString(sTrenner, sString: String; iCount: Integer): String; parst Du das aus den Klammern.
Damit erhältst Du einmal den ersten Teil (iCount := 1), also den EditBox-Namen, und dann den zweiten Teil (iCount := 2), also den EditBox-Inhalt.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   i: Integer;
   sEditBox: String;
   sText: String;
   comp: TComponent;
begin
   for i := 0 to memData.Lines.Count do
   begin
      if Pos('define', LowerCase(memData.Lines.Strings[i])) >0 then begin
         sEditBox := ParseString(', ', WhatsInBrackets(memData.Lines.Strings[i]), 1);
         sText := ParseString(', ', WhatsInBrackets(memData.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]));
      end;
   end;
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);
         sString := Copy(sString, Pos(LowerCase(sTrenner), LowerCase(sString)) + 1, Length(sString));
      end;
      Result := sErgebnis;
   end;
end;

//***** 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;

Mirco 16. Mai 2006 21:57

Re: Textausschnitt in Edit's
 
Hallo s-off,
du hast es verstanden, ich immer noch nicht ganz, vom Prinzip her schon.
Z.B.
Delphi-Quellcode:
(memo1.Lines.Strings[i]), 1);
(memo1.Lines.Strings[i]), 2); hab ich nicht verstanden, wieso 1 & 2
dann
Delphi-Quellcode:
sEditBox := ParseString(', ', WhatsInBrackets(memo1.Lines.Strings[i]), 1);
sText := ParseString(', ', WhatsInBrackets(memo1.Lines.Strings[i]), 2);
usw. ...
Ich werde mir dein Beispiel reinziehen, will das auch verstehen.
Danke für deine spontane Hilfe.
Gruß
Mirco

s-off 17. Mai 2006 06:43

Re: Textausschnitt in Edit's
 
Hallo Mirco,

schau Dir die Parameter der Funktionen ExtractString und ParseString an.

Zitat:

(memo1.Lines.Strings[i]), 1);
(memo1.Lines.Strings[i]), 2); hab ich nicht verstanden, wieso 1 & 2
Die 1 und die 2 gehören zu der Funktion ParseString. Diese Funktion kann auf beliebige Teile eines String zugreifen, der durch Trenner geteilt worden ist; klassisches Beispiel, eine CSV-Datei:

sCSV := 'zwei;drei;vier;fünf;sechs;sieben';

ParseString(';', sCSV, 1) -> das erste Element des Strings => zwei
ParseString(';', sCSV, 2) -> das zweite Element des Strings => drei
ParseString(';', sCSV, 7) -> das siebte Element des Strings => gibt es hier

Zitat:

sEditBox := ParseString(', ', WhatsInBrackets(memo1.Lines.Strings[i]), 1);
Hier entsteht der String sEditBox aus zwei Operationen. Zuerst führe ich die Funktion WhatsInBrackets auf den String aus dem Memo aus. Dadurch bekomme ich das, was in der Zeile zwischen den beiden Klammern steht, z.B. 'TEXT_MAINA', 'Test1'.
Diesen String parse ich dann für sEditBox mit Trenner ', ' und iCount := 1 und bekomme TEXT_MAINA.

Mirco 17. Mai 2006 16:58

Re: Textausschnitt in Edit's
 
Hallo s-off,

Danke für deine Erklärungen, das hilft weiter.
Kann ich auch den umgekehrten Weg gehen und die ausgelesenen Edit's wieder in der Textdatei speichern?
Noch ein Beispiel wäre echt schön.

Viele Grüsse
Mirco

Mirco 18. Mai 2006 17:46

Re: Textausschnitt in Edit's
 
Hätte ich die neue Frage besser in einem neuen Thread gestellt?
Viele Grüße
Mirco

Mirco 20. Mai 2006 09:55

Re: Textausschnitt in Edit's
 
Hallo...
also ich versuche es noch einmal, glaube ich hab's nich deutlich genug erklärt.

Kurz zu dem was ich gerne machen würde.
Ich möchte die Testdatei auslesen und bestimmte Bereiche in den Edit's anzeigen lassen.
(Dank deiner Hilfe s-off klappt das ja)

Nun wird der Text der in den Edit's steht editiert bzw. verändert.
Es fehlt mir der Schritt die Edit's zu speichern, d.h. die zuvor ausgelesenen Stellen,
mit den veränderten Edit's zu ersetzen und zu speichern.
Beim nächsten auslesen der Textdatei würde dann in den Edit's der neue Text stehen.

Ich hoffe das ich mich nun einigermaßen verständlich ausgedrückt habe.

Grüße
Mirco


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 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