读文件,然后把数据存入表中 (100分)

Y

yourid

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题曾问过的,但一直没能完全解决,文章有点长请耐心看下去。:)

现有文本文件若干,基本内容相差不多,如下:
Sample= TH
Axial Force= 1.000000E+1
Confining Pressure= 7.580000E+1
Pore Pressure= 0.000000E+0
Temperature= 6.000000E+1
Length= 4.897000E+4
Units= kN:MPa:mm:us:m/s:V:C
Date|Time= 8/1/102 - 15:28
Pore Fluid= Dry
Transducers= 25 mm - 1 MHz
Travel Time= 414
Wave= S1
Mode= S/R
Energy= 1
Gain= 20
RC Filter= Out
Vertical Scale= 4.000E-2
Horizontal Scale= 2.000E-8
Horizontal Delay= 6.400E-5
想编程实现
1.从文本文件中读出每个数据(如下的9个数据)
2.AxialForce, ConfiningPressure, PorePressure ,Temperatur, Length ,Wave
VerticalScale, HorizontalScale ,HorizontalDelay 9个值输入到数据库表中
第2个问题还没有办法,总向表中加入的是空值。
第1个问题没有办法把读出来的数据分离开,代码如下:
procedure TForm1.openBtnClick(Sender: TObject);
var
readfile:TextFile;
filename,name,result,fileline:String;
I:Integer;
valuelist:TStringList;
begin
valuelist:=TStringList.create;//把读出的数值放入valuelist中
if OpenDialog1.Execute then
filename:=OpenDialog1.FileName;
AssignFile(readfile,filename);
Reset(readfile);
while not Eof(readfile) do
begin
name:='';
result:='';
readLn(readfile,fileline);//读第一行
for I:=1 to Length(fileline) do
begin
if fileline='=' then break;
name:=name+fileline;
end;
for I:=Length(name)+2 to Length(fileline) do
begin
result:=result+fileline;
valuelist.Add(result);
end;
end;
valuelist.Free;
closefile(readfile);
end;
 
.....
valuelist.loadfromfile(opendialog1.filename);
dataset.insert;
for i := 0 to valuelist.count-1 do
if dataset.findfield(valuelist.names)<>nil then
dataset.findfield(valuelist.names).asstring := valuelist.values[valuelist.names];
dataset.post;
 
用stringlist的value属性读取每一行数据。
 
同意Another_eYes

//假如Memo1载入了文本的内容, 点击Button1, Memo2列出的东西你一看就知道是怎么回事了:
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
FieldName: string;
begin
for I := 0 to Memo1.Lines.Count - 1 do
begin
FieldName := Memo1.Lines.Names;
Memo2.Lines.Add(Format('Name=%s Value=%s', [FieldName, Memo1.Lines.Values[FieldName]]));
end;
end;

 
to Another_eYes
还是向数据库中提交的是空值,:(
怎么回事呢?
 
那干脆生成sql insert吧
 
thanks:)
how?
因为上面的文本文件中有些行是不需要的,要把它们区分出来再存入库中,不知道这种
循环语句该怎么写?
 
那你挑需要的读不就的了?
if valuelist.indexofname(xxxx) then ....
else if valuelist.indexofname(yyyy) then ....
else ...
 
老兄,我感觉你文本文件若存为 *.INI 文件就简单多了。

如读取这个:
Sample= TH
代码为:
var Myinifile:TInifile;
str1:=Myinifile.Readstring('小节名','Sample',缺省值);
或用 Readinteger、Readbool。

知道了键,就能够直接取得对应的值。 读出来再处理,写入也很方便。
 
to jrq
可惜文件不是我保存的,本是ASIC码文件,可用txt打开罢了。我无法安装那个软件。
:(
 
>>本是ASIC码文件,可用txt打开罢了
save as --- *.ini 不知可否?
如果不行的话,如楼上所说,用stringlist 或 D6的ValueListEditor控件试试效果如何。
 
to jrq
可以保存为ini文件,但是打开后不象写字板打开那样,因为有一个"o"(背景为黑色),
大概为空格吧。

valueListEditor控件是D7附带的吗?还是自己安装进去的?

我用D7
 
如果原文件是ini文件就很方便了,可以按节的方式读出并保存到相应的数组,可省去大段代码
 
to sunnie

有相似的例子或详细的说明吗?
 
多人接受答案了。
 
ValueListEditor是D6、D7都自带的。
ini文件读取有很多例子,你搜一搜以前的帖子就能看到。
 
顶部