请教一个dephi问题,我有一个文本文档,想把里面的每行6个数据通过一定公式计算后的结果输出成一个新的文本文档,文档大小约为10M问题补充:输出文件每行为5个数据,源文本每行6个数据,格式为
……
31: oL[1153]( x[/-62.8] y[/-8.3] z[/-10.3] u[/-0.66175835] v[/-0.57149924] w[/0.48524684] )
31: oL[1154]( x[/-62.7] y[/-8.6] z[/-10.1] u[/-0.66189173] v[/-0.57494751] w[/0.48097265] )
31: oL[1155]( x[/-62.6] y[/-8.9] z[/-10] u[/-0.66197151] v[/-0.57849393] w[/0.47659049] )
……
每一行读中括号里面的数据,把其中的x, y, z, u, v,w 赋给不同的变量,
这六个变量通过一些公式计算得出五个变量,比如H=x+y,I=u-z,J=v*w,K=x/y,L=w/z,
然后这五个变量输出的格式为
……
GB H1.0 I40.824 J7.735 K.736 L35
GB H2.12 I10.994 J17.335 K2.866 L66
GB H10.50 I20.887 J71.643 K10.931 L2
……
的文本
小数点精确到0.001
如果源文本中某一行缺少某一个变量的值则沿用先前行的值
……
31: oL[1153]( x[/-62.8] y[/-8.3] z[/-10.3] u[/-0.66175835] v[/-0.57149924] w[/0.48524684] )
31: oL[1154]( x[/-62.7] y[/-8.6] z[/-10.1] u[/-0.66189173] v[/-0.57494751] w[/0.48097265] )
31: oL[1155]( x[/-62.6] y[/-8.9] z[/-10] u[/-0.66197151] v[/-0.57849393] w[/0.47659049] )
……
每一行读中括号里面的数据,把其中的x, y, z, u, v,w 赋给不同的变量,
这六个变量通过一些公式计算得出五个变量,比如H=x+y,I=u-z,J=v*w,K=x/y,L=w/z,
然后这五个变量输出的格式为
……
GB H1.0 I40.824 J7.735 K.736 L35
GB H2.12 I10.994 J17.335 K2.866 L66
GB H10.50 I20.887 J71.643 K10.931 L2
……
的文本
小数点精确到0.001
如果源文本中某一行缺少某一个变量的值则沿用先前行的值
var
f:textfile;
s:string;
x,y,z,u,v,w,h,i,j,k:double;
begin
assigned(f,'文件名.txt');
try
reset(s);
while not eof(f) do
begin
readln(f,s);
..... //解析s,然后给你需要的x,y,z,u,v,w 附值
..... //计算你的公式h=..,i=..,j=..,k=..
end;
finally
closefile(f);
end;
end;
var
f,f2:textfile;
s,s2:string;
strs:TStringList;
x,y,z,u,v,w,h,i,j,k,L:double;
i1:integer;
begin
assignfile(f,'c:\1.txt');
assignfile(f2,'c:\2.txt');
strs:=TStringList.Create;
try
reset(F);
rewrite(f2);
while not eof(f) do
begin
strs.Clear;
readln(f,s);
s:=Copy(s,Pos('](',s)+2,Length(s));
ExtractStrings(['[','/',' ',']'],[],pChar(s),strs);
for i1:=0 to (strs.Count div 2)-1 do
begin
if strs[i1*2]='x' then
x:=StrToFloat(strs[i1*2+1])
else if strs[i1*2]='y' then
y:=StrToFloat(strs[i1*2+1])
else if strs[i1*2]='z' then
z:=StrToFloat(strs[i1*2+1])
else if strs[i1*2]='u' then
u:=StrToFloat(strs[i1*2+1])
else if strs[i1*2]='v' then
v:=StrToFloat(strs[i1*2+1]);
end;
H:=x+y;
I:=u-z;
J:=v*w;
K:=x/y;
L:=w/z;
s2:=Format('GB H%.3f I%.3f J%.3f K%.3f L%.3f',[H,I,J,K,L]);
writeln(f2,s2);
end;
finally
closefile(f);
closefile(f2);
end;
end;
uses StrUtils; //包含此单元const
CharFlag: string = 'xyzuvw';
var
v: array[1..6] of Single;
Source: TStringList;
Dest: TStringList;
I, J, n: Integer; function GetValue(s: string; Offset, x: Integer): Integer;
var
n, m: Integer;
begin
Result := Offset;
// [/ 后面的'-'不知是数据负号,还是标记,这里做负号处理,如果是标记,则下面要改成'[/-'
n := PosEx(CharFlag[x] + '[/', s, Offset);
if n = 0 then Exit;
Inc(n, 3);
m := PosEx(']', s, n);
if m <> 0 then
begin
v[x] := StrToFloat(Copy(s, n, m - n));
Result := m + 1;
end;
end;begin
Source := TStringList.Create;
Dest := TStringList.Create;
try
Source.LoadFromFile('e:\Source.txt');
for I := 1 to 6 do
v[I] := 0.0;
for I := 0 to Source.Count - 1 do
begin
n := 1;
for J := 1 to 6 do
n := GetValue(Source[I], n, J);
Dest.Add(Format('GB H%.3f I%.3f J%.3f K%.3f L%.3f',[v[1] + v[2],
v[4] - v[3],
v[5] * v[6],
v[1] / v[2],
v[6] / v[3]]));
end;
Dest.SaveToFile('e:\Dest.txt');
finally
Dest.Free;
Source.Free;
end;
end;
31: oL[8]( y[/-24.2] z[/4.6] )
12: end ctx 3dPath usg(poly)
12: beg ctx 3dPath usg(poly)
10: tr(tech)
10: nctx(BTC)
10: nctx(0)
这种程序怎么在delphi里调试阿,我是初学者,不会阿!请教一下,谢谢!
var
f,f2:textfile;
s,s2:string;
x,y,z,u,v,w,h,i,j,k,L:double;
i1:integer; function GetTokenValue(str:string;var value:double):boolean;
var
iPos:integer;
iBegin,iEnd:integer;
strTemp:string;
begin
if Pos(str,s)>0 then
begin
iBegin:=Pos(str,s)+3;
strTemp:=Copy(s,iBegin,Length(s));
iEnd:=Pos(']',strTemp)-1;
value:=StrToFloat(Copy(strTemp,1,iEnd));
result:=true;
end else
result:=false;
end;
begin
assignfile(f,'c:\1.txt');
assignfile(f2,'c:\2.txt');
try
reset(F);
rewrite(f2);
while not eof(f) do
begin
readln(f,s); GetTokenValue('x[/',x);
GetTokenValue('y[/',y);
GetTokenValue('z[/',z);
GetTokenValue('u[/',u);
GetTokenValue('v[/',v); H:=x+y;
I:=u-z;
J:=v*w;
K:=x/y;
L:=w/z;
s2:=Format('GB H%.3f I%.3f J%.3f K%.3f L%.3f',[H,I,J,K,L]);
writeln(f2,s2);
end;
finally
closefile(f);
closefile(f2);
end;
end;
============================================================8楼的代码你不是调试了吗?难道是指uses StrUtils;?将StrUtils加在单元头部的uses行中,或者把uses StrUtils;放在implementation下面。
Dest.Add(Format(....
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
//此函数用于得到一个变量的值,str是一行数据,value是要输出的值,返回值用于判断是否存在该变量的值
function GetValue(str,v:string;var value:double):boolean;
function nPos(substr,str:string;ibegin:integer):integer;
var
i:integer;
begin
result:=ibegin;
for i:=ibegin to length(str) do
if str[i]=substr then
begin
result:=i;
break;
end;
end;
var
i:integer;
aa,bb:integer;
s:string;
begin
i:=pos(v,str);
if i=0 then begin result:=false;exit;end;//找不到则退出
aa:=i+2;//某变量值开始位置
i:=npos(']',str,aa); //取得最近的]的位置
if i=aa+1 then begin result:=false;exit;end;//为空则退出
s:=copy(str,aa+1,i-aa-1);//取出中间的数据
try
value:=strtofloat(s);
result:=true;
except
result:=false;//如果不是数字则退出
exit;
end;
end;
//这里是缺省值,如果源文本中某一行缺少某一个变量的值则沿用先前行的值
procedure doLine(str:string;var Default_x,Default_y,Default_z,Default_u,Default_v,Default_w:double);//此函数用于处理一行数据
var
x,y,z,u,v,w,H,I,J,K,L:double;
s:string;
f:textfile;
begin
//取出各变量的值
try
assignfile(f,'c:\2.txt');
if FileExists('c:\2.txt') then
append(f) else rewrite(f);
if not Getvalue(str,'x',x) then
x:=Default_x;//如果源文本中某一行缺少某一个变量的值则沿用先前行的值
if not Getvalue(str,'y',y) then
y:=Default_y;//如果源文本中某一行缺少某一个变量的值则沿用先前行的值
if not Getvalue(str,'z',z) then
z:=Default_z;//如果源文本中某一行缺少某一个变量的值则沿用先前行的值
if not Getvalue(str,'u',u) then
u:=Default_u;//如果源文本中某一行缺少某一个变量的值则沿用先前行的值
if not Getvalue(str,'v',v) then
v:=Default_v;//如果源文本中某一行缺少某一个变量的值则沿用先前行的值
if not Getvalue(str,'w',w) then
w:=Default_w;//如果源文本中某一行缺少某一个变量的值则沿用先前行的值
Default_x:=x;
Default_y:=y;
Default_z:=z;
Default_u:=u;
Default_v:=v;
Default_w:=w;
H:=x+y;
I:=u-z;
J:=v*w;
K:=x/y;
L:=w/z;
s:=Format('GB H%.3f I%.3f J%.3f K%.3f L%.3f',[H,I,J,K,L]);
writeln(f,s);
finally
closefile(f);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
x,y,z,u,v,w,Default_x,Default_y,Default_z,Default_u,Default_v,Default_w:double;
f:textfile;
str:string;
begin
Default_x:=1;
Default_y:=1;
Default_z:=1;
Default_u:=1;
Default_v:=1;
Default_w:=1;
assignfile(f,'c:\1.txt');
try
reset(F);
while not eof(f) do
begin
readln(f,str);
doline(str,Default_x,Default_y,Default_z,Default_u,Default_v,Default_w);
end;
finally
closefile(f);
end;
end;end.
比如:
s01 design by hust
s02 class 3
……
GB H1.0 I40.824 J7.735 K.736 L35
GB H2.12 I10.994 J17.335 K2.866 L66
GB H10.50 I20.887 J71.643 K10.931 L2
……
s1000 end load
s1000 data 08/06/06