• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 377
  • Last Modified:

Function to Sort Alphabetically raws of text string from a text file.

I'm writing Delphi 7 program to sort text string data from the text file as follows:-

 CSRLB  
 MOIPHI  
 HLUAP2  
 MOIPHO  
 SSI
 C7ITTH4
 HRRLAP3
 HSSPWAP
 TONE    
 TIMER
 HNMSPAP
 C7OTHDK
 C7OTGBE
 MUEP    
 MJEC
 ASDH    
 ETGB4IF
 UPDC    
 MSPUAP  
 BL2
 ETGB3IF
 MSMOAP  
 MSMO    
 MHOC    
 DQCCH
 MHIC    
 MSMT    
 C7OGATE
 BL      
 HASCAP2
 DROP    
 ECDH    

I would like to sort the above text data into

ASDH    
BL
BL2
CSRLB
etc

Thanks
Hasim Hj. Abdul Hamid
0
Hasim
Asked:
Hasim
1 Solution
 
aikimarkCommented:
if you use a TStringList variable, you can read the file directly into the variable and invoke the variable's .Sort method.
0
 
HasimAuthor Commented:
Thank for your comments.

Unfortunately, I'am not using the TStringList.
I needs the sorted text data in a text file so that I can add command in front of each text string as follows:-

Sorted data in the text file
ASDH
BL
etc

Final Text File after appending SAAEP:BLOCK= in front of each
SAAEP:BLOCK=ASDH;
SAAEP:BLOCK=BL;
etc

Appreciate your further help.

Thanks
0
 
aikimarkCommented:
You could loop through the TStringList items and output them with the prepended string 'SAAEP:BLOCK=' and appended string ';'

or...
loop through the items in the .Strings[#] property, prepending and appending the strings (see above).  Use the .SaveToFile method to save the changed strings.
0
Learn to develop an Android App

Want to increase your earning potential in 2018? Pad your resume with app building experience. Learn how with this hands-on course.

 
aikimarkCommented:
Sorry to concentrate on the TStringList, but it seems the most logical, efficient, and fastest solution.
0
 
shaneholmesCommented:
Hasim,

First, you need to explain more, cause no one can guess what you are doing.

Are you laoding the file already into delphi, if so, are you loading it into a control (Example - TMemo)?

If not, are you loading it into a data container, list, array, etc.

If you aren't loading it into delphi, does a file exist on hardrive and you want to sort there?

Please explain exactly what you are doing and with what or with what you what to do it with.

Shane
0
 
RatjeCommented:
Don't give me the points, just providing a simple example of the answer given here allready:

procedure TForm1.Button1Click(Sender: TObject);
var
  sList : TStringlist ;
  I : Integer ;
begin
  memo1.Lines.LoadFromFile('c:\temp\test.txt') ;
  sList := Tstringlist.create();
  for I := 0 to Memo1.Lines.Count do
   sList.Add(memo1.Lines[I]) ;
  memo1.Clear ;
  sList.Sort;
  for I := 1 to sList.Count -1  do
    memo1.lines.Add('SAAEP:BLOCK='+sList.Strings[I]) ;

  freeAndNil(sList) ;
end;

All that remains is saving the data again.


Rat
0
 
d1kGroupCommented:
you can use a TStringList only to sort. try this

procedure SortTextFile(FileName: String);
var
  list: TStringList;
begin
  list := TStringList.Create;
  list.LoadFromFile(FileName);
  list.Sort;
  list.SaveToFile(FileName);
  list.Free;
end;
0
 
aikimarkCommented:
d1kGroup,

<...only to sort...>
Really?  What about:

procedure SortTextFile(FileName: String);
var
  sList: TStringList;
  nLoop: Integer;
begin
  sList:= TStringList.Create;
  sList.LoadFromFile(FileName);
  sList.Sort;
  for nLoop := 1 to sList.Count -1  do
     sList.Strings[nLoop] := 'SAAEP:BLOCK=' + sList.Strings[nLoop] + ';'
  sList.SaveToFile(FileName);
  sList.Free;
end;
0
 
aikimarkCommented:
oops, that should have read:
...
  for nLoop := 0 to sList.Count -1  do
...
0
 
aikimarkCommented:
Hasim, are you still with us?
0
 
aikimarkCommented:
Hasim?
0
 
aikimarkCommented:
Hasim?
0

Featured Post

2018 Annual Membership Survey

Here at Experts Exchange, we strive to give members the best experience. Help us improve the site by taking this survey today! (Bonus: Be entered to win a great tech prize for participating!)

Tackle projects and never again get stuck behind a technical roadblock.
Join Now