?
Solved

how can i split this string?

Posted on 2009-05-14
6
Medium Priority
?
1,113 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
6 Comments
 
LVL 2

Accepted Solution

by:
Usurpatirus earned 150 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
New benefit for Premium Members - Upgrade now!

Ready to get started with anonymous questions today? It's easy! Learn more.

 
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

Want to be a Web Developer? Get Certified Today!

Enroll in the Certified Web Development Professional course package to learn HTML, Javascript, and PHP. Build a solid foundation to work toward your dream job!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This is a fine trick which I've found useful many times, when you just don't want to accidentally run a batch script or the commands needs administrator rights.
What's worse than having your data encrypted by ransomware? Getting attacked by a so-called "wiper," which simply destroys the data and offers you no hope of ever seeing it again.
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
Suggested Courses

777 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