Solved

Reading strings

Posted on 2004-05-02
5
290 Views
Last Modified: 2010-04-05
I have this code that opens a text file and reads every line and looks for $ symbol
then it reads bacwards until it finds a space and foreward the same way, and copys the string in between the spaces  how can i change it to read backwards until it finds @ and foreward until it finds a @  symbol?

is this the right way, or do i need to use blockread ?

var
  r : TextFile;
  F : TextFile;
  S : STRING;
  i : integer;
begin

    AssignFile(F,File1);
  Reset(F);
   REPEAT
  // REPEAT
   Readln(F,S);
 I := Pos('$',S);
 if I > 0 then begin
   while (I > 0) and (S[I] <> '@ ') do Dec(I);
   S := Copy(S,I + 1,Length(S) - I);
   I := Pos('@ ',S + '@ ');
   A := Copy(S,1,I - 1);
    // S := Copy(S,I,Length(S) - I + 1);
 end;
   Writeln(r,a);
 // showmessage(a);
 //UNTIL (i)=0;
 UNTIL Eof(F);
 CloseFile(F);
 end;
0
Comment
Question by:herd_bone
[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
5 Comments
 
LVL 12

Expert Comment

by:esoftbg
ID: 10974933
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  r : TextFile;
  f : TextFile;
  A : STRING;
  S : STRING;
  I : integer;
  J : integer;
  K : integer;
begin
  J := 0;
  AssignFile(r, 'Q_20975533_r.txt');
  Rewrite(r);
  AssignFile(F, 'Q_20975533.txt');
  Reset(f);
  repeat
    Readln(f, S);
    I := Pos('$', S);
    if I > 0 then
    begin
      J := I;
      while (J > 0) and (S[J] <> '@') do
        Dec(J);
      K := I;
      while (K < Length(S)) and (S[K] <> '@') do
        Inc(K);
      if (J>0) then
      begin
        A := Copy(S, J+1 , K-J-1);
        S := Copy(S, K, Length(S) - K + 1);
      end;
    end;
    if (J>0) then
      Writeln(r, A);
  until Eof(f);
  CloseFile(r);
  CloseFile(f);
end;
0
 

Author Comment

by:herd_bone
ID: 10975221
It works good, one question though, why does it put too many of the same strings in the list
if i read a file that has alot of lines, it puts duplicate strings into my result..
0
 
LVL 12

Expert Comment

by:esoftbg
ID: 10975321
I did try a simple text file wich contains 3 rows and only the 3-d contains '@ and foreward $ until it finds a @':

I have this code that opens a text file and reads every line and looks for $ symbol
then it reads bacwards until it finds a space and foreward the same way, and copys the string in between the spaces  
how can i change it to read backwards until it finds @ and foreward $ until it finds a @  symbol?

I guess my code is not perfect. I need to try with more complex text file.
emil
0
 
LVL 12

Accepted Solution

by:
esoftbg earned 110 total points
ID: 10975395
try this, I tested with more complex text file:

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  r : TextFile;
  f : TextFile;
  A : string;
  S : string;
  I : integer;
  J : integer;
  K : integer;
begin
  AssignFile(r, 'Q_20975533_r.txt');
  Rewrite(r);
  AssignFile(F, 'Q_20975533.txt');
  Reset(f);
  repeat
    Readln(f, S);
    I := Pos('$', S);
    while (I > 0) do
    begin
      J := I;
      while (J > 0) and (S[J] <> '@') do
        Dec(J);
      K := I;
      while (K < Length(S)) and (S[K] <> '@') do
        Inc(K);
      if (J>0) then
      begin
        A := Copy(S, J+1 , K-J-1);
        Writeln(r, A);
      end;
      S := Copy(S, K+1, Length(S) - K + 1);
      I := Pos('$', S);
    end;
  until EOF(f);
  CloseFile(r);
  CloseFile(f);
end;
0
 

Author Comment

by:herd_bone
ID: 10980942
Thanks esoftbg.
0

Featured Post

[Webinar] Code, Load, and Grow

Managing multiple websites, servers, applications, and security on a daily basis? Join us for a webinar on May 25th to learn how to simplify administration and management of virtual hosts for IT admins, create a secure environment, and deploy code more effectively and frequently.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Base1 Encode/Decode 3 100
Firemonkey Tcameracomponent resultion 1 49
Firemonkey Listview item popup menu ? 1 78
Automatic field translation delphi 10.2 6 46
A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

752 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