我脱掉了头发!
我尝试用免费的pascal来帮助我的一个padawan。
我一开始就陷入困境。我想做的就是别的,只需将文件行读入变量。
文件的结构只是:
CityNameWithoutSpace ProductName ProductCount
这是我的代码:
procedure TmainForm.readProcutsBtnClick(Sender: TObject);
var
i: Integer;
productCity: string;
productName: string;
productCount: Integer;
productFileIn: TextFile;
begin
assignFile(productFileIn, 'termek.txt');
reset(productFileIn);
i := 0;
while not EOF(productFileIn) do
begin
i := i + 1;
readLn(productFileIn, productCity, productName, productCount);
end;
closefile(productFileIn);
end;
问题在于它会引发异常。
如果我只使用有效的readLn(productFileIn, productCity);
。 productCity
将是整行。
但是如何将空格分隔成这些变量呢?
编辑:
答案 0 :(得分:1)
最简单的方法是将整行读入一个字符串,然后将其拆分为变量。正如@Rudy所说,字符串的ReadLn()
操作无法知道如何分隔字符串。
请参阅下面的示例,其中整个文件都加载到字符串列表中。之后,所有列表项都被拆分为一系列产品记录。
type
TProductRec = record
productCity: string;
productName: string;
productCount: Integer;
end;
var
productArray : array of TProductRec;
aList : TStringList;
i : Integer;
sArray : TStringArray;
begin
aList := TStringList.Create;
try
aList.LoadFromFile('termek.txt');
SetLength(productArray,aList.Count);
for i := 0 to aList.count-1 do begin
sArray := aList[i].Split([' ']);
if Length(sArray) = 3 then begin
productArray[i].productCity := sArray[0];
productArray[i].productName := sArray[1];
productArray[i].productCount := StrToInt(sArray[2]);
end;
end;
// Do something with the product record array
finally
aList.Free;
end;
end;
//免责声明:未经测试,但您可以获得图片