请问如何用流操作来读取文本文件里的浮点数据,我有用过TStringList变量做过,但是那需要用StrToFloat转换,严重影响运行效率,请问大虾们有什么效率高的方法,即使不用流操作也行啦,文本文件里的数据格式如下:
0 0 1 1
1.2 2.3 3.4 4.5
2.4 3.5 4.6 5.7
请多多帮助!
0 0 1 1
1.2 2.3 3.4 4.5
2.4 3.5 4.6 5.7
请多多帮助!
解决方案 »
- Edit怎么添加提示输入的文字和图片?
- 请问TreeView和Treelist有什么区别?
- 局域网文件传输,56k的拨号局域网络内传输问题--在线等
- delphi开发地理信息系统请教
- 谁能告诉我做一个类似于IndexName、DataField属性,已经把字段名罗列在弹出式菜单中,供程序员选择。
- 显示提示的问题!
- mousemove是鼠标移动到该控件时触发一个事件,有没有这样鼠标移出该控件时触发的事件啊。
- 用ADOQUERY.SQL能否改变'TEXT'类型字段大小,且保留原有数据?
- 大问题
- 请问哪有INSTALLSHIELD FOR DELPHI 5 或汉化版下载
- 两个数据库数据同步的问题
- 熟悉Socket Tcp网络通讯的高手请进,状态是LISTENING, 但为何拒绝服务?
倒不是因为字符串转浮点数慢。
begin
Readln(MyFile,i);
.....
end;
procedure ReadDataFromStream(AStream : TStream);
var
vC : Char;
vS : string;
begin
vS := '';
while AStream.Read(vC, 1) = 1 do
begin
if vC <> ' ' then
begin
vS := vS + vC;
end
else begin
if vS <> '' then
begin
DisposeFloatData(vS);
end;
vS := '';
end;
end;
end;//处理浮点数
procedure DisposeFloatData(AData : String);
var
vF : Double;
begin
vF := StrtoFloat(AData);
....
end;
SysUtils, Classes;type
TReadFloatCallback = procedure (const aFloat: Extended; const aParam: Pointer);procedure ReadFloatDataProc(const aFileName: string;
aReadFloatCallback: TReadFloatCallback;
const aParam: Pointer);
var
FileStream: TFileStream;
Parser: TParser;
begin
FileStream := TFileStream.Create(aFileName, fmOpenRead or fmShareDenyWrite);
try
Parser := TParser.Create(FileStream);
try
while Parser.Token <> toEOF do
begin
if Parser.Token in [toFloat, toInteger] then
aReadFloatCallback(Parser.TokenFloat, aParam); Parser.NextToken;
end;
finally
Parser.Free;
end;
finally
FileStream.Free;
end;
end;procedure ReadFloatCallback(const aFloat: Extended; const aParam: Pointer);
//overwrite this procedure your self
begin
Writeln(FloatToStr(aFloat));
end;begin
ReadFloatDataProc('C:\File1.txt', ReadFloatCallback, nil);
ReadLn;
end.