Readln Problem

When I use the Readln procedure to read a line from a text file, everything goes ok.  But when I use it within a loop to read the body of the text it gives me everything but when there's a empty line (or simply a couple of carraige returns, whatever) it doesn't give back a result.  So when I'm writing to an array of strings, it acts like it skips all carraige returns.  Does anyone know how to resolve this or a better procedure to use.  Any tips would be helpful.
peteyjAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

CFantinCommented:
try this code

procedure TForm1.Button1Click(Sender: TObject);
var F: TextFile;
    I: Integer;
    A: Array [0 .. 100] of String;
begin
  AssignFile(F, 'C:\MyFileName.Txt');
  Reset(F);
  I := 0;
  while not EOF(F) do
  begin
    ReadLn(F, A[I]);
    Inc(I);
  end;
  CloseFile(F);
end;

This code works for me.

Why don't you use a StringList instead of an array like this

procedure TForm1.Button1Click(Sender: TObject);
var F: TextFile;
    I: Integer;
    S: String;
    A: TStringList;
begin
  AssignFile(F, 'C:\MyFileName.Txt');
  A := TStringList.Create;
  Reset(F);
  while not EOF(F) do
  begin
    ReadLn(F, S);
    A.Add(S);
  end;
  CloseFile(F);
end;

Hope this helps
Good Luck
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
erajojCommented:
Try "LoadFromFile" method of TStringList.

/// John
0
peteyjAuthor Commented:
Using Writeln, I am also getting errors.  Any suggestions for these?  And how many strings can I have in a stringlist?
0
Build an E-Commerce Site with Angular 5

Learn how to build an E-Commerce site with Angular 5, a JavaScript framework used by developers to build web, desktop, and mobile applications.

erajojCommented:
Submit the code so we can have a look!

/// John

0
CFantinCommented:
A StringList Should be able to hold 32767,
but I have never tried to hold that many.

Does the ReadLn code work?
0
peteyjAuthor Commented:
The readln procedures are working ok, but now the writeln still aren't.  Here's the code if anyone can take a crack at it.

function TMainForm.OverWriteTextFile(SatFileName: String;
                                     SatRTextFile: RTextFile): Boolean;
var
  SalTextFile         : TextFile;
  SalFileName         : String;
  SalRTextFile        : RTextFile;
  SalWriteString      : String;
  i                   : integer;
begin
  Result := False;
  SalFileName  := SatFileName;
  SalRTextFile := SatRTextFile;
  AssignFile(SalTextFile, SalFileName);
  try
    Rewrite(SalTextFile);
  except on EInOutError do
    begin
      CloseFile(SalTextFile);
      Result := False;
      exit;
    end;
  end;
  for i := 1 to 8192 do
  begin
    SalWriteString := SalRTextFile.OutputBuffer[i];
    if (SalWriteString <> '') then
    begin
      try
        Writeln(SalTextFile, SalWriteString);
      except on EInOutError do
        begin
          CloseFile(SalTextFile);
          exit;
        end;
      end;

    end;
  end;
  CloseFile(SalTextFile);
  Result := True;
end;


All variables of type RTextFile are records, and InputBuffer and OutputBuffer are arrays of strings, which I plan to change to SringLists.  If you've got any questions on anything else let me know.
0
CFantinCommented:
Sorry I have not responded for a while but I was on site in another City.

What error are you getting when you use the WriteLn?

If the problem is that it is not writing the blank lines then try
taking out the check "if the SalWriteString <> '' then".

Other than that it looks like your code sould work.

Here is a bit of code that will write a Memo to a text file

unit MyTextFile.Pas;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function WriteTextFile(SatFileName: String; StringListToWrite: TStringList): Boolean;
var FileToWrite: TextFile;
    I: Integer;
begin
  AssignFile(FileToWrite, SatFileName);
  //Add try finally to close the file
  try
    try
      Rewrite(FileToWrite);
    except
      on EInOutError do
      begin
        Result := False;
        Exit;
      end;
    end;
    // for item in the StringList
    for I := 0 to StringListToWrite.Count - 1 do
    begin
      try
        //Write the line
        Writeln(FileToWrite, StringListToWrite[I]);
      except
        on EInOutError do
        begin
          Result := False;
          Exit;
        end;
      end;
    end;
  finally
    CloseFile(FileToWrite);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WriteTextFile('C:\MyTextFile.txt', TStringList(Memo1.Lines));
end;

end.

Try this out.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Delphi

From novice to tech pro — start learning today.