Solved

how can i split this string?

Posted on 2009-05-14
6
1,101 Views
Last Modified: 2012-05-06
im new to delphi...
 i have a string like this  " 123|asd1|fhgj2|er3|45678| "
and i need to split it up.
i figured out how to do it IF it has different separators (eg " %123|asdf*fhgj^er|) like this
textin := %123|asdf|fhgj|er|45678|
 text1 := copy(textin, 1, pos('%', textin)-1);
  Delete(textin, 1, pos('%', textin)-1);
 text2 := copy(textin,1 ,pos('|', textin)-1);
  Delete(textin, 1, pos('|', textin)-1);
...
  L := Form2.ListView1.Items.Add;
  L.Caption := info;
  L.SubItems.Add(text1);
  L.SubItems.Add(text2);
ect

but how do i do it if the separators are the same?


0
Comment
Question by:electrodude102
  • 3
  • 2
6 Comments
 
LVL 2

Accepted Solution

by:
Usurpatirus earned 50 total points
ID: 24382522
you may use StringReplace function, or while loop:
procedure TForm1.Button2Click(Sender: TObject);

var

Str : String;

begin

Str := '%123|asdf*f|hgj^|er|';
 

   with Listview1.Items.Add do

   begin

        Caption := Copy(Str,1, Pos('|',Str)-1);

        system.Delete(Str,1,Pos('|',Str));

   while Trim(Str)<>'' do

   begin

        Subitems.Add(Copy(Str,1, Pos('|',Str)-1));

        System.Delete(Str,1,Pos('|',Str));

   end;

   end;

end;
 
 

procedure TForm1.Button1Click(Sender: TObject);

var

Str : String;

begin

Str := '%123|asdf*f|hgj^|er|';

with Listview1.Items.Add do

begin

        Caption := Copy(Str,1, Pos('|',Str)-1);

        System.Delete(Str,1,Pos('|',Str));

        SubItems.Text := (StringReplace(Str,'|',#13,[rfReplaceAll, rfIgnoreCase]));

end;

end;

Open in new window

0
 
LVL 9

Expert Comment

by:Graceful_Penguin
ID: 24382549
You just have to loop the code you have there and it will work. I used ShowMessage to test if it works but I have also given you the code to add it to the listview in comments.
textin := '123|asdf|fhgj|er|45678';

while (pos('|', textin) > 0) do

begin

  text1 := copy(textin, 0, pos('|', textin)-1);

  Delete(textin, 1, pos('|', textin));
 
 

//  L := Form2.ListView1.Items.Add;

//  L.Caption := info;

//  L.SubItems.Add(text1);

ShowMessage(text1);

ShowMessage(textin);

Open in new window

0
 
LVL 9

Expert Comment

by:Graceful_Penguin
ID: 24382556
sorry did not copy the end;
textin := '123|asdf|fhgj|er|45678';

while (pos('|', textin) > 0) do

begin

  text1 := copy(textin, 0, pos('|', textin)-1);

  Delete(textin, 1, pos('|', textin));

 

 

//  L := Form2.ListView1.Items.Add;

//  L.Caption := info;

//  L.SubItems.Add(text1);

  ShowMessage(text1);

  ShowMessage(textin);

end;

Open in new window

0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 1

Author Comment

by:electrodude102
ID: 24382733
Graceful_Penguin: that works but i need a var(?) for each "set" of the string (not sure how to explain it..)
 
example: if the string in was '123|asdf|fhgjer|45678' it does this
text0 := 123
text1 := asdf
text2 := fhgjer
text3 := 45678

(cause i need to use them later, get it?)
0
 
LVL 9

Expert Comment

by:Graceful_Penguin
ID: 24382874
The easiest way is to use a stringlist to store the strings but if you don't like that you can use a dynamic array. Here is the source for the string list. Just remember to destroy it when you are done.
var textin, text1 : string;

 Strings : TStringlist;

 counter : integer;

begin

   textin := '123|asdf|fhgj|er|45678';

   Strings := TStringlist.Create;

   counter := 0;

while (pos('|', textin) > 0) do

begin

  Strings.Add(copy(textin, 0, pos('|', textin)-1));

  Delete(textin, 1, pos('|', textin));
 
 

//  L := Form2.ListView1.Items.Add;

//  L.Caption := info;

//  L.SubItems.Add(text1);

   ShowMessage(Strings[counter]);

   ShowMessage(textin);

   inc(counter);

Open in new window

0
 
LVL 1

Author Comment

by:electrodude102
ID: 24387267
im going to accept Usurpatirus answer cause after messing around with it it seems he most usable, thanks you all your help
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Short answer to this question: there is no effective WiFi manager in iOS devices as seen in Windows WiFi or Macbook OSx WiFi management, but this article will try and provide some amicable solutions to better suite your needs.
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now