在Delphi中将.txt文件中的双重数据读入数组

在Delphi中将.txt文件中的双重数据读入数组,delphi,delphi-xe2,Delphi,Delphi Xe2,我不熟悉Delphi编码和读取.txt文件。我试图从一个.txt文件中读取输入数据(制表双精度),其中每一列都被视为一个变量(天、温度、压力等),每一行都被视为一个时间步长(小时)。如何将这些数据读入数组,以便使用这些变量(逐行)进行每小时计算 非常感谢您的建议 输入示例(在.txt文件中有两个选项卡): 到目前为止我所拥有的(VCL表格申请): 我会使用TStringList将文件解析为行并标记每个分隔值 首先,要将文件加载到字符串列表中: var Strings: TStringList

我不熟悉Delphi编码和读取.txt文件。我试图从一个.txt文件中读取输入数据(制表双精度),其中每一列都被视为一个变量(天、温度、压力等),每一行都被视为一个时间步长(小时)。如何将这些数据读入数组,以便使用这些变量(逐行)进行每小时计算

非常感谢您的建议

输入示例(在.txt文件中有两个选项卡):

到目前为止我所拥有的(VCL表格申请):


我会使用
TStringList
将文件解析为行并标记每个分隔值

首先,要将文件加载到字符串列表中:

var
  Strings: TStringList;
....
Strings := TStringList.Create;
try
  Strings.LoadFromFile(FileName);
  ProcessStrings(Strings);
finally
  Strings.Free;
end;
然后实际处理字符串:

procedure ProcessStrings(Strings: TStrings);
var
  line, item: string;
  items: TStringDynArray;
  value: Double;
begin
  for line in Strings do
  begin
    items := SplitString(line, #9#32);//use tab and space as delimiters
    for item in items do
    begin
      value := StrToFloat(item);
      //do something with value
    end;  
  end;
end;

虽然标题将数据描述为整数,但它似乎是整数和浮点的混合体。无论如何,我认为您应该能够填空、填充动态值数组、处理错误检查等等。

Delphi仍然有非常老式的文本变量pascal读取过程,因此您可以直接读取数组:)


请发布txt的内容,或者至少是一个示例。既然-12.7是一个整数是什么时候?文本文件中包含浮点,那么是否应该在某个地方进行StrToFloat转换?@John Yes确实如此。问题的标题是关于整数的,我没有仔细研究文件的内容。+1ed,但也许我更喜欢
TStreamReader
TryStrToFloat
以获得更好的睡眠:-)@TLama我还不知道
TStreamReader
?我想我太老了。我应该努力学习吗?为什么?至于
TryStrToFloat
,这要看情况而定。我们没有足够的信息来说明如何处理错误,这就是为什么我没有尝试这样做,并编写了最后一段。
TStreamReader
如果您需要读取大文件,可能会更好,因为它将使用缓冲区,而不是将整个文件读入
TStringList
。(@TLama-cc)如果每行有9个变量,这将做同样的事情-但自从我以这种方式读取文件以来,已经很久了:)这(使用Readln()命令)帮了我大忙!万岁!轻松的老式解决方案!:)谢谢
var
  Strings: TStringList;
....
Strings := TStringList.Create;
try
  Strings.LoadFromFile(FileName);
  ProcessStrings(Strings);
finally
  Strings.Free;
end;
procedure ProcessStrings(Strings: TStrings);
var
  line, item: string;
  items: TStringDynArray;
  value: Double;
begin
  for line in Strings do
  begin
    items := SplitString(line, #9#32);//use tab and space as delimiters
    for item in items do
    begin
      value := StrToFloat(item);
      //do something with value
    end;  
  end;
end;
Var NumArray: Array[1..9] of double; // you have 9 variables

while not eof(F) do begin
  read(F,NumArray[1],NumArray[2],NumArray[3],NumArray[4],NumArray[5],NumArray[6],NumArray[7],NumArray[8],NumArray[9]);
    // store it somewhere; 
end;