Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Textinhalt aufsplitten (https://www.delphipraxis.net/167149-textinhalt-aufsplitten.html)

EarthQuaker 15. Mär 2012 12:40

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. :)

Coffeecoder 15. Mär 2012 12:42

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));

EarthQuaker 15. Mär 2012 12:56

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? :)

joachimd 15. Mär 2012 12:56

AW: Textinhalt aufsplitten
 
Lesenswert: http://delphi.about.com/cs/adptips20...ltip1102_5.htm

Coffeecoder 15. Mär 2012 13:05

AW: Textinhalt aufsplitten
 
Zitat:

Zitat von EarthQuaker (Beitrag 1156687)
Sollte doch denke ich ok sein oder eher weniger? :)

Versuchs mal ;) Sollte aber klappen.
Sieh dir auch den Artikel von joachimd an.

EarthQuaker 15. Mär 2012 13:17

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 :)

DeddyH 15. Mär 2012 13:36

AW: Textinhalt aufsplitten
 
Ja und? Geh die Datei zeilenweise durch, splitte die aktuelle Zeile auf und verteile die ermittelten Teilstrings auf die Listboxen.

Coffeecoder 15. Mär 2012 13:38

AW: Textinhalt aufsplitten
 
Sollte dein Programm mehrsprachig werden?
Machst du deshalb diese Trennung? Sonst könntest du dir mal XML ansehen.

EarthQuaker 15. Mär 2012 14:20

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

EarthQuaker 16. Mär 2012 10:53

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

DeddyH 16. Mär 2012 10:59

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;

EarthQuaker 16. Mär 2012 11:21

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

DeddyH 16. Mär 2012 11:32

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).

EarthQuaker 16. Mär 2012 11:38

AW: Textinhalt aufsplitten
 
Also ganz normal öffne ich eine Textdatei:

Code:
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;
und auf klick von der Listbox bei den einträgen fügt sich das ganze in die 2 und 3 listbox ein.

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

Bummi 16. Mär 2012 12:52

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');

DeddyH 16. Mär 2012 13:05

AW: Textinhalt aufsplitten
 
Delphi-Quellcode:
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;
Das sollte doch auch funktionieren, ohne die Struktur der Datei ändern zu müssen.

EarthQuaker 16. Mär 2012 13:16

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

DeddyH 16. Mär 2012 13:18

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:
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;
[/edit]

EarthQuaker 16. Mär 2012 13:27

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 :)

EarthQuaker 20. Mär 2012 11:50

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

mkinzler 20. Mär 2012 11:57

AW: Textinhalt aufsplitten
 
Z.B. mit (TStringList).SaveToFile()

EarthQuaker 20. Mär 2012 14:10

AW: Textinhalt aufsplitten
 
Danke dir, irgendwie finde ich derzeit keine möglichkeit dies umzusetzen... :(

MfG

mkinzler 20. Mär 2012 14:14

AW: Textinhalt aufsplitten
 
Delphi-Quellcode:
        ...
        List.LoadFromFile(OpenDialog1.Filename);
        VerteileStrings(List, ListBox2.Items, ListBox3.Items);
        List.SaveToFile( ChangeFileExt(OpenDialog.Filename, '') + '_neu' + ExtractFileExt(OpenDialog.Filename));
        ...

Coffeecoder 20. Mär 2012 15:04

AW: Textinhalt aufsplitten
 
So geht es auch (Befehle wie AssignFile usw auch bitte angucken).
Quellcode von der Seite http://www.delphibasics.co.uk/RTL.asp?Name=WriteLn

Delphi-Quellcode:
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;
Mfg,

EarthQuaker 21. Mär 2012 08:42

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...

DeddyH 21. Mär 2012 08:52

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.

EarthQuaker 21. Mär 2012 08:58

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

DeddyH 21. Mär 2012 09:06

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;

EarthQuaker 21. Mär 2012 13:55

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

mkinzler 21. Mär 2012 13:57

AW: Textinhalt aufsplitten
 
Ja. Aber hier gilt neue Frage, neuer Thread.

EarthQuaker 21. Mär 2012 15:52

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