arrays - 在来自文本文件的字符串的特定索引中搜索特定字符时出错(计算文本文件中的段落)
问题描述
我在文本文件中搜索特定字符时遇到问题。问题来自计算文本文件中的段落的任务。这个想法很明显 - 文本文件中的两个段落被一个空白行分隔,这意味着该行中的第一个字符是 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
不返回行尾字符,因此当您尝试访问空行的第一个字符时,您会遇到访问冲突,因为没有“第一个”字符可以访问 via Line[1]
。如果您真的想逐个字符地访问文件,请使用Read()
而不是ReadLn()
.
要根据 q 的标题搜索字符串,请使用该Pos()
函数在字符串中搜索字符或子字符串。请参阅 OLH 了解用法。
推荐阅读
- php - 检索到数据库时如何压缩 blob 图像?
- swift - 我需要能够在 SwiftUI 中打开相机并在应用程序中拍照
- python - 计算 S3 StreamingBody 的 sha256 与 sha256sum 返回的校验和不同
- python - AttributeError: 'Downloader' 对象没有属性 '_PlaylistDownloader__server'(属性连接问题)
- java - 在线作业的高级字符串操作
- powershell - 使用 powershell 获取当前登录的 Web 会话 cookie
- java - 将值插入 HashBasedTable
- security - 为什么将密码哈希和盐存储在同一个地方被认为是可以的?
- python - 在 django 中与单元测试分开运行集成测试
- asterisk - Asterisk 看不到队列成员