Textausschnitt in Edit's
Hallo
Ich habe folgendes Beispiel:
Delphi-Quellcode:
Damit kann ich einzelne Bereiche aus einer Textdatei in Tedit's einlesen.
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; 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:
Die Edit's heissen nun
<?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'); ... TEXT_MAINA TEXT_MAINB TEXT_MAINC usw. Gruss Mirco |
Re: Textausschnitt in Edit's
Hallo...
hab ich mich zu umständlich ausgedrückt? Mirco |
Re: Textausschnitt in Edit's
Hallo,
meiner Meinung nach - ja :wiejetzt: Edit: ok, habs verstanden - meld mich gleich wieder (vielleicht) ;) |
Re: Textausschnitt in Edit's
Okay...wenn nich erklär ich gerne alles nochmal anders.
THX |
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; |
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:
dann
(memo1.Lines.Strings[i]), 1);
(memo1.Lines.Strings[i]), 2); hab ich nicht verstanden, wieso 1 & 2
Delphi-Quellcode:
usw. ...
sEditBox := ParseString(', ', WhatsInBrackets(memo1.Lines.Strings[i]), 1);
sText := ParseString(', ', WhatsInBrackets(memo1.Lines.Strings[i]), 2); Ich werde mir dein Beispiel reinziehen, will das auch verstehen. Danke für deine spontane Hilfe. Gruß Mirco |
Re: Textausschnitt in Edit's
Hallo Mirco,
schau Dir die Parameter der Funktionen ExtractString und ParseString an. Zitat:
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:
Diesen String parse ich dann für sEditBox mit Trenner ', ' und iCount := 1 und bekomme TEXT_MAINA. |
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 |
Re: Textausschnitt in Edit's
Hätte ich die neue Frage besser in einem neuen Thread gestellt?
Viele Grüße Mirco |
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