这是我第一次尝试使用记录。我有大约180个分隔文本文件,每个文件大约有250,000行。在每个文件中,最多有150个唯一的记录,文件的内容被分配给记录的匹配id。
type
StringsRec = Record
id : string[2];
Content : TStringList;
end;
….
var
RecArray : array of StringsRec;
RecLen : Integer;
iList, sl : TstringList;
….
字符串列表iList
和sl
在create和destroy表单上创建和销毁。在每个文件之后,iList被清除,并且RecArray
的长度被设置为0。但是,我还没有了解到这一点。第一条记录的内容中添加了3行(Tstringlist
)。第二个有8,第三个有12。到目前为止没有问题,但当第四个新记录创建时,我得到了访问冲突。
检查是否需要新记录的代码。Arec是源文件中一行中一列的前两个字母;检查其有效性并且两个字符都是字母。
procedure TForm1.MakeRec(Arec : string);
var
x : Integer;
isThere : Boolean;
begin
isThere := False;
if RecLen = 0 then isThere := False
else
begin
for x := 0 to iList.Count-1 do
begin
if copy(iList[x],1,2) = Arec then
begin
isThere := True;
Exit;
end;
end;
end;
if isThere = False then
begin
SetLength(RecArray,Length(RecArray)+1);
RecLen := Length(RecArray);
RecArray[RecLen].id := Arec;
RecArray[RecLen].Content := TStringList.Create;
iList.Add(Arec+'='+IntToStr(RecLen));
ShowMessage(RecArray[reclen].id + ' ' +inttostr(iList.IndexOfName(arec)));
end;
end;
对于第4条记录,显示的消息是空白的,但对话框展开,好像有一些文本x1c 0d1x,当我尝试添加内容时,我得到了违规。(s2是上面的Arec)
RecArray[iList.IndexOfName(s2)].Content.Add(sl[x]);
除非我的代码充满了错误,否则我怀疑这个问题是由于内存造成的,这也是我以前从未深入研究过的问题。
任何帮助将不胜感激。我正在使用 Delphi 7与Windows 11 64位
编辑
我已经尝试逐步执行我的代码中我认为发生错误的部分。
在所有四个记录创建中,将光标停留在第2、3和4行的id上显示正确的2个字母,但第四个记录步进到第5行,id变为#0000和各种其他字符的字符串。
我希望这能帮我缩小范围
1条答案
按热度按时间mbyulnm01#
你很幸运,它没有得到一个违规更早。问题似乎在这里对我来说:
但是数组是[0..3]!没有元素4。