![]() |
Textinhalt aufsplitten
Hallo Liebe gemeinde, und zwar brauch ich nunmal wieder eure Hilfe ;)
bin grade an einem Projekt und habe ein Problem. Und zwar folgendes: - Es existiert eine Textdatei z.b. mit dem inhalt Willkommen;Will-kommen dies ist durch ein Semikolon getrennt was auch richtig ist, diese möchte ich nun einlesen in ACHTUNG 2 Verschiedenen Edit feldern, ist dies möglich? normal einlesen per ListBox oder Memo klappt wunderbar, jedoch ist dann des Semikolon zu sehen. Hoffe ihr könnt mir helfen, vielen Dank. :) |
AW: Textinhalt aufsplitten
Hi,
Mit Pos(';',deinString) die Position finden und mit Copy der String arbeiten und in Edit Felder einfügen:
Delphi-Quellcode:
Edit1.text := Copy(Source,1, (pos(';',Source))-1);
Edit2.text := Copy(Source,pos(';',Source))+1,length(Source)); |
AW: Textinhalt aufsplitten
Danke, werde ich gleich mal Testen, hoffe klappt alles so wie ich das möchte ;)
Ansonsten bin ich für alle weiteren vorschläge offen. MfG Edit: Edit2.text := Copy(Edit1.text,1, (pos(';',Edit1.text))-1); Edit3.text := Copy(Edit1.text,pos(';', + Edit1.text))+1,length(Edit1.text)); Sollte doch denke ich ok sein oder eher weniger? :) |
AW: Textinhalt aufsplitten
|
AW: Textinhalt aufsplitten
Zitat:
Sieh dir auch den Artikel von joachimd an. |
AW: Textinhalt aufsplitten
Danke für den Link zur seite...bringt mir leider immer wieder fehler bei Split(xx)
Hauptgedanke ist eigentlich das in einer Datei "Test.txt" mehrere zeilen drinne stehen z.b.: Willkommen; Will kommen Hallo; H all o Wachstube; Wachs tube sowas in der art. beim öffnen der datei soll dann jedoch der text vor dem Semikolon in ListBox1 od. Edit1 stehen und nach dem Semikolon in der ListBox2 od. Edit2. nach bearbeiten z.b. von Edit2 soll dies dann wieder gespeichert werden z.b. Edit1: Willkommen Edit2: Welcome Jedoch soll nur immer Edit2 bearbeitet werden können. also nach dem Semikolon halt. So war bisschen genauer beschrieben ;) Danke trotzdem nochmal für die Hilfe :) |
AW: Textinhalt aufsplitten
Ja und? Geh die Datei zeilenweise durch, splitte die aktuelle Zeile auf und verteile die ermittelten Teilstrings auf die Listboxen.
|
AW: Textinhalt aufsplitten
Sollte dein Programm mehrsprachig werden?
Machst du deshalb diese Trennung? Sonst könntest du dir mal XML ansehen. |
AW: Textinhalt aufsplitten
Nein soll nicht mehrsprachig sein, dies war eher ein Beispiel, worin ich beschreiben wollte was eigentlich genau gemeint ist.
Ist im endefekt eh der Letzte schritt vom Programm, alle anderen dinge sind bereits fertig, jedoch kam ich da leider nicht mehr weiter. Danke trotzdem nochmals für die Antworten :) jetzt fehlt nur noch den Edit2 zu speichern hihi ;) MfG |
AW: Textinhalt aufsplitten
Liste der Anhänge anzeigen (Anzahl: 1)
Hey, so habe es nun erstmal geschaft habe aber trotzdem noch eine frage an euch sicherlich hilfsbereiten usern :)
Habe mal einen screenshot angehangen und nun meine frage: wie bekomme ich denn hin das alles nicht links in die listbox eingetragen wird sondern rechts in die 2 listboxen und das auch getrennt? :) der rest funktionierte dank eurer hilfe ganz gut :) Bitte daher nochmal um eure hilfe, VIELEN Dank :) MfG |
AW: Textinhalt aufsplitten
Ohne Gewähr, da aus dem Kopf getippt:
Delphi-Quellcode:
procedure VerteileStrings(Quelle, Ziel1, Ziel2: TStrings);
var List: TStringlist; i: integer; begin Assert(Assigned(Quelle) and Assigned(Ziel1) and Assigned(Ziel2)); Ziel1.BeginUpdate; try Ziel1.Clear; Ziel2.BeginUpdate; try Ziel2.Clear; List := TStringlist.Create; List.Delimiter := ';'; try for i := 0 to Quelle.Count - 1 do begin List.DelimitedText := Quelle[i]; if List.Count > 0 then Ziel1.Add(List[0]); if List.Count > 1 then Ziel2.Add(List[1]); end; finally List.Free; end; finally Ziel2.EndUpdate; end; finally Ziel1.EndUpdate; end; end; |
AW: Textinhalt aufsplitten
Danke dir DeddyH, muss ich nur schauen ob ich es anpassen kann irgendwie. derzeit klappts noch nicht. Das nach langem echt mal wieder eine herrausforderung ;)
Weitere tips sind willkommen hier :) MfG |
AW: Textinhalt aufsplitten
Wie rufst Du es denn auf? Eigentlich sollte es klappen (gut, ich bin auch nicht fehlerfrei, aber so auf Anhieb kann ich nicht erkennen, was da nicht funktionieren sollte).
|
AW: Textinhalt aufsplitten
Also ganz normal öffne ich eine Textdatei:
Code:
und auf klick von der Listbox bei den einträgen fügt sich das ganze in die 2 und 3 listbox ein.
procedure TForm1.SpeedButton3Click(Sender: TObject);
var DateiName: TFileName; begin if OpenDialog1.Execute then begin ListBox1.Clear; DateiName := (OpenDialog1.Filename); ListBox1.Items.LoadFromFile(DateiName); end; end;
Code:
procedure TForm1.ListBox1Click(Sender: TObject);
begin for i := 0 to ListBox1.Items.Count -1 do begin if ListBox1.Selected[i] then Edit1.Text := ListBox1.Items.Strings[i]; ListBox2.Items.Strings[0] := Copy(Edit1.Text,1, (pos(';',Edit1.Text))-1); ListBox3.Items.Strings[0] := Copy(Edit1.Text,pos(';',Edit1.Text)+1,length(Edit1.Text)); end; end; Im endefekt soll es dich jedoch schon beim offnen der datei gleich auf die listbox2 und 3 verteilen, somit spare ich mir dann die listbox1. MfG |
AW: Textinhalt aufsplitten
Wenn Du statt des Semicolons = als Trenner verwendest könntest Du Dir einiges sparen mit
Delphi-Quellcode:
ValueListEditor1.Strings.LoadFromFile('C:\temp\fff.txt');
|
AW: Textinhalt aufsplitten
Delphi-Quellcode:
Das sollte doch auch funktionieren, ohne die Struktur der Datei ändern zu müssen.
procedure TForm1.SpeedButton3Click(Sender: TObject);
var DateiName: TFileName; List: TStringlist; begin if OpenDialog1.Execute then begin List := TStringlist.Create; try List.LoadFromFile(OpenDialog1.Filename); VerteileStrings(List, ListBox2.Items, ListBox3.Items); finally List.Free; end; end; end; |
AW: Textinhalt aufsplitten
Liste der Anhänge anzeigen (Anzahl: 1)
@ Bummi:
Auch dir danke ich werde es mir auch mal mit anschauen. Aber die struktur wollte ich im moment erstmal beibehalten. Danke DeddyH! Klappt wunderbar, ... aber leider schneidet er alles nach einem Leerzeichen ab siehe Screenshot. MfG |
AW: Textinhalt aufsplitten
Das Problem ist bekannt. In neueren Delphi-Versionen gibt es dafür StrictDelimiter, in Delphi 7 leider noch nicht. Da muss man sich dann mit schmutzigen Tricks behelfen.
[edit] Geänderte Version, wieder ungetestet:
Delphi-Quellcode:
[/edit]
procedure VerteileStrings(Quelle, Ziel1, Ziel2: TStrings);
var List: TStringlist; i: integer; begin Assert(Assigned(Quelle) and Assigned(Ziel1) and Assigned(Ziel2)); Ziel1.BeginUpdate; try Ziel1.Clear; Ziel2.BeginUpdate; try Ziel2.Clear; List := TStringlist.Create; List.Delimiter := ';'; try for i := 0 to Quelle.Count - 1 do begin List.DelimitedText := StringReplace(Quelle[i], ' ', #255, [rfReplaceAll]); if List.Count > 0 then Ziel1.Add(StringReplace(List[0], #255, ' ', [rfReplaceAll])); if List.Count > 1 then Ziel2.Add(StringReplace(List[1], #255, ' ', [rfReplaceAll])); end; finally List.Free; end; finally Ziel2.EndUpdate; end; finally Ziel1.EndUpdate; end; end; |
AW: Textinhalt aufsplitten
Na das ist doch mal perfekt... VIELEN Herzlichen DANK auch. So funktioniert die Splittung perfekt und sogar Kommas werden mit angezeigt ;)
MfG PS. Damit kann ich nun wieder weiterarbeiten und dementsprechend texte ändern und dann von der 3 listbox mit kommas abspeichern :) |
AW: Textinhalt aufsplitten
Hey Ihr helfer, brauche nochma eure hilfe :)
soweit hat ja nun alles geklappt... nun meine frage am rande... wie speichere ich wenn ich änderungen durchführe eigentlich wieder in die datei hinnein? :) MfG |
AW: Textinhalt aufsplitten
Z.B. mit (TStringList).SaveToFile()
|
AW: Textinhalt aufsplitten
Danke dir, irgendwie finde ich derzeit keine möglichkeit dies umzusetzen... :(
MfG |
AW: Textinhalt aufsplitten
Delphi-Quellcode:
...
List.LoadFromFile(OpenDialog1.Filename); VerteileStrings(List, ListBox2.Items, ListBox3.Items); List.SaveToFile( ChangeFileExt(OpenDialog.Filename, '') + '_neu' + ExtractFileExt(OpenDialog.Filename)); ... |
AW: Textinhalt aufsplitten
So geht es auch (Befehle wie AssignFile usw auch bitte angucken).
Quellcode von der Seite ![]()
Delphi-Quellcode:
Mfg,
var
myFile : TextFile; text : string; begin // Try to open the Test.txt file for writing to AssignFile(myFile, 'Test.txt'); ReWrite(myFile); // Write a couple of well known words to this file WriteLn(myFile, 'Hello World'); // Write a blank line WriteLn(myFile); // Write a string and a number to the file WriteLn(myFile, '22/7 = ' , 22/7); // Repeat the above, but with number formatting WriteLn(myFile, '22/7 = ' , 22/7:12:6); // Close the file CloseFile(myFile); // Reopen the file for reading Reset(myFile); // Display the file contents while not Eof(myFile) do begin ReadLn(myFile, text); ShowMessage(text); end; // Close the file for the last time CloseFile(myFile); end; |
AW: Textinhalt aufsplitten
Hey und Danke, aber funtioniert garnicht erst und leider auch nicht passend irgendwie...:(
MfG Edit: Inhalt einer textdatei: IX;9 IV;4 ich will dann z.b. die 9 in neun umbenennen und nur dieser eintrag soll dann in der textdatei geändert werden. es befindet sich jedoch jeder eintrag in einer anderen listbox... |
AW: Textinhalt aufsplitten
Dann bau Dir den resultierenden String doch aus den Listboxen zusammen, füge ihn einer Stringliste hinzu und speichere die zum Schluss.
|
AW: Textinhalt aufsplitten
Klingt recht vernünftig... aber wie nur? manche dinge bringe ich aber dann gibts wieder was wo ich total versage echt schlimm :(
MfG |
AW: Textinhalt aufsplitten
Ungefähr so (aus dem Kopf):
Delphi-Quellcode:
var
MaxCount, i: integer; DestList: TStringlist; begin MaxCount := ListBox1.Items.Count; if ListBox2.Items.Count < MaxCount then MaxCount := ListBox2.Items.Count; DestList := TStringlist.Create; try for i := 0 to MaxCount - 1 do DestList.Add(ListBox1.Items[i] + ';' + ListBox2.Items[i]); DestList.SaveToFile(Dateiname); finally DestList.Free; end; end; |
AW: Textinhalt aufsplitten
Vielen Herzlichen Dank, funktioniert auf anhieb :)
MfG Besteht die möglichkeit eigentlich wenn ich bei der listbox2 einen eintrag auswähle das auch gleichzeitig bei der listbox3 der selbe eintrag gewählt wird? also die selbe zeile! MfG |
AW: Textinhalt aufsplitten
Ja. Aber hier gilt neue Frage, neuer Thread.
|
AW: Textinhalt aufsplitten
Stimmt schon, wollte es gleich damit verbinden :) trotzdem Danke
MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:07 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-2025 by Thomas Breitkreuz