[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Losing character between SkipLine and ReadString from TextIO
From: |
Gaius Mulley |
Subject: |
Re: Losing character between SkipLine and ReadString from TextIO |
Date: |
Mon, 08 May 2023 22:39:49 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
Rudolf Schubert <rudolf@muc.de> writes:
> Hi,
>
> I recently hit problems with my 'big squash program' when using SkipLine and
> ReadString from TextIO when reading text from files.
>
> In the meantime I've done some first steps with 'cgdb' and could indeed see
> that there is a problem somewhere in the 'lower IO routines'. My knowledge
> does not suffice to point out exactly what's going wrong. Perhaps it has
> something to do with a missing doUnReadChar when 'switching' from SkipLine
> to ReadString? But I'm just guessing.
>
> My question would just be: could someone please have a look at my test program
> which I've included here? I'm creating a file with 2 lines of text in it.
> Then after having created the file I'm opening it again, calling SkipLine
> in order to jump to the second line. A ReadString should then read the second
> line but obviously the first character of the second line is missing from the
> output then.
>
>
> Here is my test program:
>
> (BTW is it ok to put the program here as text or should I better append it?)
>
> MODULE port_test6_gm2;
>
> FROM ChanConsts IMPORT
> OpenResults, old, read, write;
> FROM IOChan IMPORT
> ChanId;
> FROM StdChans IMPORT
> StdOutChan;
> IMPORT StreamFile;
> FROM TextIO IMPORT
> ReadString, SkipLine, WriteLn, WriteString;
>
>
> PROCEDURE SkipReadTest();
> CONST
> arr_len= 128;
>
> TYPE
> arr_type= ARRAY[0..arr_len-1] OF CHAR;
>
> VAR
> cid_file: ChanId;
> cid_out: ChanId;
> file_name: arr_type;
> a_str: arr_type;
> res: OpenResults;
>
> BEGIN (* PROCEDURE SkipReadTest *)
> cid_out:=StdOutChan();
>
> file_name:='test_data';
>
> (* create file and write 2 lines to it *)
> StreamFile.Open(cid_file, file_name, write+old, res);
> IF res=opened THEN
> WriteString(cid_file, '# line1');
> WriteLn(cid_file);
> WriteString(cid_file, '# line2');
> WriteLn(cid_file);
> StreamFile.Close(cid_file);
> END; (* IF res=opened *)
>
> (* (re-)open file and read from it *)
> StreamFile.Open(cid_file, file_name, read, res);
> IF res=opened THEN
> SkipLine(cid_file);
> ReadString(cid_file, a_str);
> WriteString(cid_out, a_str);
> WriteLn(cid_out);
> StreamFile.Close(cid_file);
> END; (* IF res=opened *)
> END SkipReadTest;
>
>
> BEGIN (* MODULE port_test6_gm2 *)
> SkipReadTest();
> END port_test6_gm2.
>
>
> BR
>
> Rudolf
>
> --
> Rudolf Schubert \
> Kirchstr. 18a \ mailto:rudolf@muc.de
> 82054 Sauerlach > http://www.dose.muc.de
> Deutschland /
> Tel. 08104/908311 /
Hi Rudolf,
thanks for the bug report and test code - I can also confirm the bug
exists and have filed a PR
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109779 and will fix it,
regards,
Gaius