【发布时间】:2019-07-04 19:23:59
【问题描述】:
我在文本文件中搜索特定字符时遇到问题。问题来自计算文本文件中的段落的任务。这个想法很明显 - 文本文件中的两个段落被一个空白行分隔,这意味着该行中的第一个字符是 ASCII#13,所以如果我创建一个通过的过程
这个想法很明显 - 文本文件中的两个段落被一个空行分隔,这意味着该行中的第一个字符是 ASCII#13,所以如果我创建一个遍历文本文件中每一行的过程,并且如果行中的第一个字符是 ASCII#13,然后计数器增加 1。但是当我这样做时,我在运行程序时得到一个 external: SIGSEGV 错误。这是代码 -
procedure paragraphs(name:string) ;
var
line:string;
paragraphs:integer;
file:textfile
begin
assignfile(file, name) ;
reset(file);
paragraphs:=0;
while not eof(file) do
begin
readln(file,line);
if line[1]=#13 then //here is the error
paragraphs:=paragraphs+1;
end;
end;
现在奇怪的是,我有一个非常相似的程序来计算单词的总数,它在相同的基础上工作并且工作正常,没有错误
procedure words(name:string);
var
insideword:boolean ;
x,words:integer;
file:textfile;
line:string;
begin
assignfile(file, name);
reset(file);
words:=0;
while not eof(file) do
begin
insideword:=false;
readln(file,line);
for x:=1 to length(line) do
begin
if line[x]=' ' then insideword:=false //no problem here
else begin
if insidewords=false then words:=words+1;
insidewords:=true;
end;
end;
end;
end;
我认为字符串基本上是 char 数组,但我认为在这种情况下字符串是动态数组会阻止我使用特定索引,尽管它基本上在 Words 过程中有效,而且我使用相同的想法 - 搜索特定字符的动态数组。但是在这里我需要在该行的第一个索引中搜索特定字符。为什么上述程序段落不起作用?关于如何更正该过程以使其显示文本文件中的段落数的任何想法?
【问题讨论】:
-
您永远不会在这些字符串中看到换行符。曾经。这就是 ReadLn 的意义所在。考虑学习调试。如果您检查变量,您将看到它们包含的内容。
标签: arrays text-files pascal lazarus paragraph