想得我头痛,不愿再想了,400分求读取txt文件字符串问题 ( 积分: 300 )

  • 主题发起人 主题发起人 JOJO813
  • 开始时间 开始时间
J

JOJO813

Unregistered / Unconfirmed
GUEST, unregistred user!
问题是这样的,我有个txt文件,打开后是这样:
#========================
# 接口配置
#========================
pushd interface

reset all


popd
# 接口配置结束



# ----------------------------------
# 接口 IP 配置
# ----------------------------------
pushd interface ip


# "本地连接" 的接口 IP 配置
set address name = "本地连接" source = static addr = 193.168.105.16 mask = 255.255.255.0
set address name = "本地连接" gateway = 193.168.105.1 gwmetric = 1
set dns name = "本地连接" source = static addr = 202.96.128.68
add dns name = "本地连接" addr = 172.16.100.180
set wins name = "本地连接" source = static addr = none
popd
# 接口 IP 配置结束

我要把里面的ip地址即“193.168.105.16”,网关:“193.168.105.1”,以及dns:“202.96.128.68”这三项数据读取到我的程序里的三个edit里面,如果我修改了这三个edit的数字,按下确定按钮txt文件里的数据也相对改变,请问各未大侠神仙高人,该如何实现,对了,txt文件和我的程序在同一路径里,各位帮帮小女子吧,300分呀!如果嫌少可再加。
 
问题是这样的,我有个txt文件,打开后是这样:
#========================
# 接口配置
#========================
pushd interface

reset all


popd
# 接口配置结束



# ----------------------------------
# 接口 IP 配置
# ----------------------------------
pushd interface ip


# "本地连接" 的接口 IP 配置
set address name = "本地连接" source = static addr = 193.168.105.16 mask = 255.255.255.0
set address name = "本地连接" gateway = 193.168.105.1 gwmetric = 1
set dns name = "本地连接" source = static addr = 202.96.128.68
add dns name = "本地连接" addr = 172.16.100.180
set wins name = "本地连接" source = static addr = none
popd
# 接口 IP 配置结束

我要把里面的ip地址即“193.168.105.16”,网关:“193.168.105.1”,以及dns:“202.96.128.68”这三项数据读取到我的程序里的三个edit里面,如果我修改了这三个edit的数字,按下确定按钮txt文件里的数据也相对改变,请问各未大侠神仙高人,该如何实现,对了,txt文件和我的程序在同一路径里,各位帮帮小女子吧,300分呀!如果嫌少可再加。
 
1)以文本方式打开数据文件
2)按行读取文本文件
s1:='static addr =';
s2:='mask';
while not Eof(f1) do
begin
readln(f1,s); //s是String类型的
if (pos(s1,s)<>0) then
begin
pos1:=pos(s1,s)+length(s1)+1;//pos1是integer类型的,记录193.168.105.16前的位置
if pos(s2,s)<>0 then pos2:=pos(s2,s);//pos2记录193.168.105.16结束的位置
end;
//有了这两个位置,你就可以用copy函数来读取任意的数据了,当然你也可以调到 Edit中去,另外,写回来的过程还是要这样,只不过可以:
SWrite:=copy(s,1,pos1)+edit1.text+copy(s,pos2-1,length(s)-pos2);这样就完成了写入,原理就是如此。
end;
 
就楼上说的吧
用tstrings的load读出来
写入太麻烦
建议用ini
可以在固定字段写
比较方便
 
正在找解决放按。
正如楼上说的,用ini文件要容易读取的。为什么不该成INI文件呢?
 
用*.ini文件
procedure TDMSales.ConnectDatabase(Dbname: string);
var AppIni: TIniFile;
StrDS: string;
begin
AppIni := TIniFile.Create(工程路径 + 'connect.Ini');
if (AppIni <> nil) then
begin
StrDS := AppIni.ReadString('Database', 'Data Source', '');
end;
AppIni.Free;
ADOCOnnert.Connected := false;
ADOCOnnert.ConnectionString := '';
ADOCOnnert.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=' + Dbname + ';Data Source=' + StrDS;

Connect.ini文件内容为:

[Database]
Data Source=数据库名(SQLServer名称);Password=密码;User ID=sa;

StrDS := AppIni.ReadString('Database', 'Data Source', '');
ReadString为读,WriteString('Database', 'Data Source', '你要写的内容');
 
麦苗:谢谢你的回复,不过你写的程序我有些不太明白
可爱小猪:我试过了,可以把txt文件换成ini文件,对程序没有影响
无泪:谢谢你的关心和回复
shiyu281hh:我不明白为什么你些的程序里有数据库设置,我的程序没有涉及到任何数据库,ini文件就是我存放数据的文件。
 
换成INI文件会更好读
 
顶一下,我现在还不知道ini文件比txt文件好在哪里,很久没有接触程序了,请各位高人指引一条明路吧,到底我该如何做?
 
INI文件的部分内容:

[本地连接]
set address name static addr = 193.168.105.16
set address name mask = 255.255.255.0
set address name gateway = 193.168.105.1
set address name gwmetric = 1
set dns name static addr = 202.96.128.68
add dns name addr = 172.16.100.180
set wins name static addr = none

程序实现思路:
USES inifiles

var
temps:string;
filename:Tinifile;
开始代码:
filename:=Tinifile.create(getcurrentdir+'/ip.ini');//假设文件名为ip.ini
temps:=filename.readstring('本地连接','set address name static addr','');
//从INI文件读取所要的文件(这个是读取的IP)
edit1.text:=temps; //把ip显示到edit1上

其他的可重复上面的读取代码。
filename.free;


这个只是我随便写的,有不对的地方见量,毕竟没有检验过。

但是,直接从txt文件中读取,你要的文件,有一定的难度,我还没有思路。
 
顶啦。。。
 
s1 :=set dns name = &quot;本地连接&quot; source = static addr =
s2 :=202.96.128.68
s3 :=???? //改变后的值

if s2 <> s3 then
源文件中查找 s1 + s2 用 s1 + s3 替换
如果 202.96.128.68 在文件中唯一可不用 s1
 
你是不会用ini文件啊
http://www.2ccc.com/article.asp?articleid=2199
看看别人的例子
 
ini文件就是我存放数据的文件。
>>>>>
任意后缀都可能做为INI文件的,改成DLL也一样可以当INI文件读写呀
 
晚上我再發一個例子,是txt文件的,解決了,一定要給分喲!
 
文件類型讀與寫
procedure TForm1.Button6Click(Sender: TObject);
Var
MyTextFile:TextFile; S1:string;
begin
S1:=Extractfilepath(Application.ExeName)+'Sales.ini';
AssignFile(MyTextFile,S1);
if FileExists(S1) then // 判斷文件是否存在
begin
Append(MyTextFile);
try
Writeln(MyTextFile,TxtSales.text);
finally
closeFile(MyTextFile);
end;
end else
begin
ReWrite(MyTextFile); //創建文件
try
Writeln(MyTextFile,TxtSales.text);
finally
closeFile(MyTextFile);
end; end; end;
procedure TForm1.CboSalesDropDown(Sender: TObject);
Var
MyTextFile:TextFile; S1,s:string;
begin
CboSales.Items.Clear ;
S1:=Extractfilepath(Application.ExeName)+'Sales.ini';
AssignFile(MyTextFile,S1);
Reset(MyTextFile); //Reset()以只讀方式打開
while not eof(MyTextFile) do
begin
Readln(MyTextFile,s);
CboSales.Items.Add(S);
end;
closeFile(MyTextFile);
end;


implementation

{$R *.dfm}

type
Person = record
name:string[8];
phone:string[20];
office:string[30];
address:string[60];
end;

var
PersonFile: File of Person;
PersonData:Person;
myFile:string;
RecSize,CurRec:Longint;

procedure TForm1.SaveRecord;
begin
//向數據文件中增加一條新的數據記錄
PersonData.name := edtName.Text;
PersonData.phone := edtTel.Text;
PersonData.office := edtOffice.Text;
PersonData.address := edtAddress.Text;

Write(PersonFile,PersonData);
end;

procedure TForm1.ClearData;
begin
edtName.Text := '';
edtTel.Text := '';
edtOffice.Text := '';
edtAddress.Text := '';
end;

procedure TForm1.ShowRecord;
begin
//顯示目前文件指針指向的那條記錄
Form1.edtName.Text := PersonData.name;
Form1.edtTel.Text := PersonData.phone;
Form1.edtOffice.Text := PersonData.office;
Form1.edtAddress.Text := PersonData.address;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ClearData; //當程序打開時初始化Form中的編輯框
CurRec := 0; //設置目前文件的記錄指針位置
myFile := 'person.dat'; //設置保存數據的文件
AssignFile(PersonFile,myFile); //將文件變量和文件相關聯
RecSize := SizeOf(PersonData); //計算每條數據記錄的長度
if FileExists(myFile) then
begin
Reset(PersonFile);
if not Eof(PersonFile) then
begin
Read(PersonFile,PersonData);
ShowRecord;
end
end
else
begin
ClearData;
ReWrite(PersonFile);
end;
end;
procedure TForm1.MoveToFirst(Sender: TObject);
begin
CurRec := 0;
Seek(PersonFile,CurRec);
Read(PersonFile,PersonData);
ShowRecord;
end;

procedure TForm1.Backwa正rd(Sender: TObject);
begin
if(CurRec - 1) < 0 then //將文件指針向後移一條
begin
CurRec := 0;
Seek(PersonFile,CurRec);
ShowMessage('已經達到文件的開始!');
end
else
begin
CurRec := CurRec - 1;
Seek(PersonFile,CurRec);
Read(PersonFile,PersonData);
ShowRecord;
end;
end;

procedure TForm1.Next(Sender: TObject);
begin
CurRec := CurRec +1; //將文件的指針向前移到一條記錄
Seek(PersonFile,CurRec);
if not Eof(PersonFile) then
begin
Read(PersonFile,PersonData);
Seek(PersonFile,CurRec);
ShowRecord;
end
else
begin
CurRec := CurRec -1;
Seek(PersonFile,CurRec);
end;
end;

procedure TForm1.MoveToLast(Sender: TObject);
begin
CurRec := FileSize(PersonFile) - 1;
Seek(PersonFile,CurRec); //將文件的指針移到文件的未尾
Read(PersonFile,PersonData);
ShowRecord;
end;

procedure TForm1.Add(Sender: TObject);
begin
if Form1.edtName.Text <> '' then
begin
SaveRecord;
ShowRecord;
clearData;
end;
end;

procedure TForm1.CloseForm(Sender: TObject);
begin
SaveRecord;
CloseFile(PersonFile);
Close;
end;

procedure TForm1.ClearForm(Sender: TObject);
begin
ClearData;
end;

end.
 
后退
顶部