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