Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:38 Uhr.
Seite 2 von 4     12 34      

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