0

私は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

何か考えはありますか?ありがとう。

4

3 に答える 3

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;
于 2013-02-26T16:42:24.250 に答える
2

StringList を使用するかどうかに関係なく、通常は文字列を分割する方が適切な方法です。

しかし、そこで古いパスカルのアプローチを使用することもできると思います。行末については忘れてください。おそらく必要ないでしょう。

var F: TextFile; I, J, K: integer;
begin
...
ReadLN(F, J);
for i := 1 to J do 
  Read(F, K);
...
end

しかし、ニッチなアプローチ(メモリ不足など)にのみ適していると思いますが、全体的な SplitString アプローチの方が高速です。

また、複数行のファイルがある場合、それらのファイルがGBサイズでない場合、2つのチェーンされた文字列リストが最も簡単なアプローチになります。

https://stackoverflow.com/a/14454614/976391 またはより多くの SL 機能を利用する - https://stackoverflow.com/a/14649862/976391

于 2013-02-26T16:42:30.473 に答える
0

TStringListクラスとそのLoadFromFileメソッド。区切り文字のプロパティもあります。

Delphiを実行しているときは、.netのように扱ってください。そこにあるべきものがあるとすれば、それはあなたがまだそれを見つけていないということです。値の数をチャックすることもできます。

于 2013-02-26T16:13:20.630 に答える