将I / O,VB6转换为Delphi

时间:2013-02-26 16:02:32

标签: delphi vb6 io

我正在使用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

有什么想法?感谢。

3 个答案:

答案 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。如果有什么东西应该存在,那就是,你还没有找到它。  你也可以把价值的数量扔掉。