我正在使用VB6代码并将其翻译成Delphi。
使用顺序命令打开文件的VB6代码:
Dim bytNumDataPoints As Byte
Dim bytcount as Byte
Dim lintData(0 To 23) As Long
Input #intFileNumber, bytNumDataPoints
For bytcount = 0 To (bytNumDataPoints - 1)
Input #intFileNumber, lintData(bytcount) '
lintData(bytcount) = (lintData(bytcount) + 65536) Mod 65536
Next bytcount
档案数据:
24 <<<<<<<<<<<< Number Data Points
200 300 400 450 500 600 750 1000 1250 1500 1750 2000 2500 3000 3500 3750 4000 4500 5000 5250 5500 5750 6000 6250 <<<< data
这是一些巧妙的东西。你一直在调用Input并填写数组。 据我所知,在Delphi中没有这种现象的等价物。你不能这样使用ReadLn,对吧?对于Delphi中的你,你必须
ReadLn(F, S); //S is a string
z.Delimiter := ' '; //z is a stringlist
z.DelimitedText := S; //and then breakdown the array
有什么想法?感谢。
答案 0 :(得分:3)
使用Read
代替Readln
;
像这样:
var
ArrLng, Index: Integer;
Arr: array of Integer;
F: Text;
begin
Assign(F, 'your-fie-name');
OpenFile(F);
try
Readln(F, ArrLng);
SetLength(Arr, ArrLng);
Index := 0;
while (not Eof(F)) and (Index < ArrLng) do
begin
Read(F, Arr[Index]);
Inc(Index);
end;
finally
CloseFile(F);
end;
end;
答案 1 :(得分:2)
分裂字符串通常是更好的方法,使用StringList或不使用。
但我认为你也可以在那里使用旧的Pascal方法。只是忘掉行尾,你可能不需要它。
var F: TextFile; I, J, K: integer;
begin
...
ReadLN(F, J);
for i := 1 to J do
Read(F, K);
...
end
但我认为这对于利基方法(如内存不足)只会很好,整体的SplitString方法会更快。
如果你有多行文件,那么两个链式字符串列表将是恕我直言最容易的方法,提供那些文件不是GB大小。
https://stackoverflow.com/a/14454614/976391 或使用更多SL功能 - https://stackoverflow.com/a/14649862/976391
答案 2 :(得分:0)
TStringList类和它的LoadFromFile方法。它也有分隔符属性。
当你做Delphi时,把它当作.net。如果有什么东西应该存在,那就是,你还没有找到它。 你也可以把价值的数量扔掉。