我需要把一个TXT文件中的一部分数据通过换算公式转换成另一组数据,这个txt文件中的数据格式如下:
1559283390071 F 0999995200000100004096000002000 BOARD 90120000 000010
1559283391071 F 0999995200000100005227000000000 BOARD 90120603 000010
1559284175071 FF1999900000000100000000000000000 BRACKET 77069105 000010
1559304175071 FF1999900000000100000000000000000 SEAT 77069105 000010
1559309207171 FF1999900000000100000000000000630 RESISTOR 72107210 000010
需要找到的数据是每行中间1后面的8位数,然后通过一个公式(比如说x*0.5=y)把它转换成另一组数据,例如第一排中,x=00004096,那么y=40.96×0.5=20.48,最后用00002048去代替原来的00004096,如此循环到最后一排,最后生成一个新的txt文件,不知道我说清楚没有,请大侠帮忙呀!
1559283390071 F 0999995200000100004096000002000 BOARD 90120000 000010
1559283391071 F 0999995200000100005227000000000 BOARD 90120603 000010
1559284175071 FF1999900000000100000000000000000 BRACKET 77069105 000010
1559304175071 FF1999900000000100000000000000000 SEAT 77069105 000010
1559309207171 FF1999900000000100000000000000630 RESISTOR 72107210 000010
需要找到的数据是每行中间1后面的8位数,然后通过一个公式(比如说x*0.5=y)把它转换成另一组数据,例如第一排中,x=00004096,那么y=40.96×0.5=20.48,最后用00002048去代替原来的00004096,如此循环到最后一排,最后生成一个新的txt文件,不知道我说清楚没有,请大侠帮忙呀!
一组公式就OK了
function NewLine(const S: string): string;
var
xStr: string;
yStr: string;
begin
xStr := Copy(S, 33, 8);
xStr := Copy(xStr, 1, 6) + '.' + Copy(xStr, 7, 2);
yStr := FormatFloat('000000.00', 0.5 * StrToFloat(xStr));
yStr := Copy(yStr, 1, 6) + Copy(yStr, 8, 2);
Result := Copy(S, 1, 32) + yStr + Copy(S, 42, Length(S) - 42);
end;
var
SF: TextFile;
DF: TextFile;
Line: string;
begin
try
AssignFile(SF, 'C:\file.txt'); //源文件
AssignFile(DF, 'C:\dest.txt'); //转换后的目标文件
Reset(SF);
Rewrite(DF);
while not Eof(SF) do
begin
ReadLn(SF, Line);
WriteLn(DF, NewLine(Line));
end;
finally
CloseFile(SF);
CloseFile(DF);
end;
end;
然后利用上面HsWong的NewLine函数