Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stringliste nach Zeichen trennen und auslesen (https://www.delphipraxis.net/167773-stringliste-nach-zeichen-trennen-und-auslesen.html)

Gollum 18. Apr 2012 12:28

AW: Stringliste nach Zeichen trennen und auslesen
 
Hallo,

vielleicht so?

Delphi-Quellcode:
procedure GetSignalListe(source, dest:TStringList);
const
  sSearch='*SIGNAL*';
var
  i:Integer;
  s:String;
begin
  dest.Clear();
  for i:=0 to source.Count-1 do
  begin
    s:=source.Strings[i];
    if Pos(sSearch, s)>0 then
      dest.Add(Copy(s, Length(sSearch)+1, Length(s)-Length(sSearch)-1);
  end; // for i
end; // GetSignalListe
...
...
NetList.LoadFromFile(Filepath);
SignalListe:=TStringList.Create();
  ....
  GetSignalListe(NetList, SignalListe);
  ShowMessage(SignalListe.Text);
  ...
SignalListe.Free();
...

MicA 18. Apr 2012 13:19

AW: Stringliste nach Zeichen trennen und auslesen
 
Hallo Gollum, vielen Dank für deinen Beitrag. Ich habe die Prozedur nochmals leicht angepasst, aber beim ausführen passiert nichts!? Normalerweise müsste sich das Programm doch einem neuen Projekt in dieser Form ausführen lassen, so dass für die Message Boxen auch was angezeigt werden müsste, oder!?

Code:
Procedure GetSignalListe(source, dest:TStringList);
const
   sSearch='*SIGNAL*';
Var
   i:Integer;
   s:String;
   NetList : TStringList;
   SignalListe : TStringList;

begin;
   NetList := TStringList.Create;

   dest.Clear();
   for i:=0 to source.Count-1 do
   begin
     s:=source.Strings[i];
     if Pos(sSearch, s)>0 then
       dest.Add(Copy(s, Length(sSearch)+1, Length(s)-Length(sSearch)-1));
   end; // for i
 end;
 NetList.LoadFromFile('C:\Users\Name\Desktop\Test.NET');
 SignalListe:=TStringList.Create();

{..............................................................................}

ShowMessage(NetList.Text);

GetSignalListe(NetList, SignalListe);

ShowMessage(SignalListe.Text);

 SignalListe.Free();
{..............................................................................}
End.

Gollum 18. Apr 2012 13:38

AW: Stringliste nach Zeichen trennen und auslesen
 
Delphi-Quellcode:
Procedure GetSignalListe(source, dest:TStringList);
const
   sSearch='*SIGNAL*';
Var
   i:Integer;
   s:String;
begin;
  dest.Clear();
  for i:=0 to source.Count-1 do
  begin
    s:=source.Strings[i];
    if Pos(sSearch, s)>0 then
      dest.Add(Copy(s, Length(sSearch)+1, Length(s)-Length(sSearch)-1));
  end; // for i
end;
Du darfst nicht innerhalb o.g. Procedure deine Listen initialisieren. Dies muss/sollte im Hauptprogramm oder wo auch immer passieren.

Delphi-Quellcode:
{..............................................................................}
  NetList:=TStringList.Create;
  NetList.LoadFromFile('C:\Users\Name\Desktop\Test.NET');
 
  SignalListe:=TStringList.Create();
  GetSignalListe(NetList, SignalListe);
  ShowMessage(SignalListe.Text);
  SignalListe.Free();
{..............................................................................}

MicA 20. Apr 2012 14:56

AW: Stringliste nach Zeichen trennen und auslesen
 
Hallo!

Vielen Dank nochmals für eure hilfe. Gollums Ansatz hat mir eigentlich sehr gefallen. Aber ich habe nun noch auch nochmals um die Hilfe eines Kollegen gebeten und letztendlich bin ich auf diese Lösung gekommen. Mit Sicherheit nicht der schönste Weg, das Problem zu lösen. Aber es funktioniert soweit.

Code:
     o:=0;
     StringList.Delimiter := '\n';
     StringList.DelimitedText := NetList.Text;

     for m := 0 to StringList.Count-1 do
     Begin
          if (StringList[m]) <> '*END*' then
          Begin
                if (StringList[m]) <> '*SIGNAL*' then inc(m)
                else
                    Begin
                         inc(m);
                         SignalName := Stringlist[m];
                         inc(m);
                         o := m;
                         while (((StringList[o]) <> '*SIGNAL*') AND ((StringList[o]) <> '*END*')) do inc(o);
                         if (o-m) < 3 then NewList.Add(SignalName);
                    End;
         End;
     End;
Vielen Dank nochmal und schönes Wochenende!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr.
Seite 3 von 3     123   

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