请教关于文本文件(txt)内容截取的问题!(100分回答)(100分)

  • 主题发起人 主题发起人 hamber
  • 开始时间 开始时间
H

hamber

Unregistered / Unconfirmed
GUEST, unregistred user!
我想先读取一个文本文件的内容,然后选取其中一些自己需要的内容,保存到另外一个文本文件中,在新的文本文件中还要加一些分隔符号,请问怎么实现?我是一个新手,希望大家可以帮帮我。
 
简单的方法是:用 TStringList 读入文件,一行一行的分析即可

在原始点就是用 文件 的方式读入,用 read 进行读取
 
能不能再具体点阿?不是很懂
 
用TSTRINGLIST或文本文件按行读取,按行来找寻你所需要的内容,然后写入另外一个文件,每写一个内容再插入你的分隔符就OK了。
如果你觉得不具体,我也没有办法,因为你的问题也不具体,最好你能举个例子。
 
SL:TStringList;
SL.LoadFromFile(FileName);//读
SL.SaveToFile(FileName); //写
 
对文件的读写还有Readln,Writeln等
procedure TForm1.Button1Click(Sender: TObject);
var
F: TextFile;
S: string;
begin
AssignFile(F, 'C:/Documents and Settings/Jiangsb/桌面/新建 文本文档.txt');
Reset(F);
while not SeekEof(F) do
begin
Readln(F, S);
//选择处理过程,合适的就加到MEMO
Memo1.Lines.Add(s);
end;
//如果要全部加到MEMO显示,那么也可以在这里处理
Memo1.Lines.SaveToFile('C:/Documents and Settings/Jiangsb/桌面/1.txt');
end;
 
我要实现的是例如下面这种格式,
111aaa222sss00
333qqq444www01
444rrr777ttt00
888ggg999uuu00
转换成
aaa|sss|00
qqq|www|01
rrr|ttt|00
ggg|uuu|00
不需要在memo中显示,在文件f中打开,保存到另一个文件fn中,就是截取部分内容我实现不了,
 
以下代码根据现有的条件得到的,如果你还有其他约束,可能就没有这么麻烦了:
procedure TForm1.Button1Click(Sender: TObject);
var SL,SL1,SL_Result:TStringList;
i,iStep,iChar:Integer;
S,SCopy,SResult:String;
begin
SL1:=TStringList.Create;
SL1.Add('111aaa222sss00');
SL1.Add('333qqq444www01');
SL1.Add('444rrr777ttt00');
SL1.Add('888ggg999uuu00');
SL:=TStringList.Create;
SL_Result:=TStringList.Create;
for i:=0 to SL1.Count-1 do begin
S:=SL1;iChar:=0;SCopy:='';SL.Clear;
while S<>'' do begin
if Ord(S[1]) In [48..57] then begin
if iChar=0 then
SCopy:=SCopy+S[1]
else begin
if SCopy<>'' then SL.Add(SCopy);
SCopy:=S[1];
iChar:=0;
end;
S:=Copy(S,2,Length(S));
end else begin
if iChar=1 then
SCopy:=SCopy+S[1]
else begin
if SCopy<>'' then SL.Add(SCopy);
SCopy:=S[1];
iChar:=1;
end;
S:=Copy(S,2,Length(S));
end;
end;
if SCopy<>'' then SL.Add(SCopy);
iStep:=1;
while iStep<SL.Count-1 do begin
if iStep=1 then SResult:=SL[iStep]
else SResult:=SResult+'|'+SL[iStep];
iStep:=iStep+2;
end;
SResult:=SResult+'|'+SL[SL.Count-1];
SL_Result.Add(SResult);
end;
for i:=0 to SL_Result.Count-1 do
showmessage(SL_Result);
end;
 
dey-999
你好,能不能给个联系方式,我还有些不太懂要请教你,谢谢。
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function changestr(str:string):string;
var
temstr:string;
begin
result:='';
temstr:=copy(str,4,3);
temstr:=temstr+'|'+copy(str,10,3);
temstr:=temstr+'|'+copy(str,13,2);
result:=temstr;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
F: textfile;
str: string;
n1,n2,n3:integer;
strList1, strList2: TstringList;
begin
strList1 := TstringList.Create;
try
assignfile(F, 'f:/f1.txt');
reset(F);
while not Eof(F) do
begin
readln(F,str);
str:=changestr(str);
strList1.Add(str);
end;
strList1.SaveToFile('F:/f2.txt');
closefile(F);
finally
freeandnil(strList1);
end;

end;

end;

其实就是写一个函数九成.
 
下面是我的程序,运行提示说文件被另一个程序使用,进程结束,并且截取的内容也没有写进新的文件fs中,请大家帮我看看哪里有问题,谢谢!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
OpenDialog1: TOpenDialog;
BitBtn1: TBitBtn;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
SaveDialog1: TSaveDialog;
procedure BitBtn1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
function changestr(str:string):string;
var
temstr:string;
begin
result:='';
temstr:=copy(str,4,3);
temstr:=temstr+'|'+copy(str,10,3);
temstr:=temstr+'|'+copy(str,13,2);
result:=temstr;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
edit1.Text:= OpenDialog1.FileName;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
f: textfile ;
fs: textfile ;
str: string;
strList1: TstringList;
begin
if edit1.text='' then
begin
showmessage('请先选择要转换的文本文件!');
form1.show;
end
else
if SaveDialog1.Execute then
begin
strList1 := TstringList.Create;
AssignFile(f, OpenDialog1.FileName);
AssignFile(fs, SaveDialog1.FileName);
Reset(f);
Rewrite(fs);
try
while not eof(f) do
begin
readln(f,str);
str:=changestr(str);
strList1.Add(str);
end;
strList1.SaveToFile(SaveDialog1.FileName);
closefile(f);
closefile(fs);
finally
freeandnil(strList1);
showmessage('文本文件已转换成功!');
self.Close;
end;
end;
end;
end.
 
把这些注释掉
//AssignFile(fs, SaveDialog1.FileName);
//Rewrite(fs);
//closefile(fs);
你直接存储就是了如果要制定fs的话,就不要用stringlist,直接用writeln写进去.
 
hityou,谢谢你了,能告诉我你的qq或邮件吗?
 
我白天上不了qq的,邮件是deepno@163.com
 
好的,谢谢你!那我要找你怎么才能找到你?我白天也要上班,一般晚上才会上q,我的是12415093
 
邮件就可以,公司要求随时开着邮箱,呵呵!我的qq是150617323
 
谢谢大家的帮助,特别谢谢hityou!
 
多人接受答案了。
 
dey-999@163.com
 
还有一点我忽略了,就是如果有标题,怎么保留。
例如:
delphi学习
111aaa222ppp00
333qqq444www01
444rrr777ttt01
888ggg999uuu00
转换成:
delphi学习
aaa|ppp|00
qqq|www|01
rrr|ttt|01
ggg|uuu|00
之前的程序是:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
OpenDialog1: TOpenDialog;
BitBtn1: TBitBtn;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
SaveDialog1: TSaveDialog;
procedure BitBtn1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function changestr(str:string):string;
var
temstr:string;
begin
result:='';
temstr:=copy(str,4,3);
temstr:=temstr+'|'+copy(str,10,3);
temstr:=temstr+'|'+copy(str,13,2);
result:=temstr;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
edit1.Text:= OpenDialog1.FileName;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
f: textfile ;
str: string;
strList1: TstringList;
begin
if edit1.text='' then
begin
showmessage('请先选择要转换的文本文件!');
form1.show;
end
else
if SaveDialog1.Execute then
begin
strList1 := TstringList.Create;
AssignFile(f, OpenDialog1.FileName);
Reset(f);
try
while not eof(f) do
begin
readln(f,str);
str:=changestr(str);
strList1.Add(str);
end;
strList1.SaveToFile(SaveDialog1.FileName);
closefile(f);
finally
freeandnil(strList1);
showmessage('文本文件已转换成功!');
self.Close;
end;
end;
end;
end.
该加些什么程序啊?
谢谢!
 
后退
顶部