我在搜索文本文件中的特定字符时遇到问题。问题来自对文本文件中的段落进行计数的任务。这个想法很明显-文本文件中的两个段落用空行分隔,这意味着该行中的第一个字符为ASCII#13,因此,如果我创建一个通过的过程,则为
这个想法很明显-文本文件中的两个段落用空行分隔,这意味着该行中的第一个字符为ASCII#13,因此如果我创建了遍历文本文件中每一行的过程,并且该行中的第一个字符是ASCII#13,然后计数器增加1。但是,当我执行此操作时,我在运行该程序时收到了外部: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过程中使用并且我使用的是相同的想法-搜索一个特定字符的动态数组。但是在这里,我需要在该行的第一个索引中搜索特定字符。为什么上述程序段落不起作用?关于如何更正该过程以使其在文本文件中显示段落数的任何想法?
答案 0 :(得分:0)
这是错误的做法。
ReadLn
不返回行尾字符,因此当您尝试访问空行的第一个字符时,会遇到访问冲突,因为没有“第一个”字符可以访问通过Line[1]
。如果您确实要按字符访问文件,请使用Read()
而不是ReadLn()
。
要根据q的标题搜索字符串,请使用Pos()
函数在字符串中搜索字符或子字符串。有关用法,请参见OLH。