如何把一个TXT文件导入到一个程序里,再按一定的格式自动改动后输出成TXT文件?(100分)

  • 主题发起人 主题发起人 guguda
  • 开始时间 开始时间
G

guguda

Unregistered / Unconfirmed
GUEST, unregistred user!
文本是这样的:
00ads000108@tom,20020615 23:18:42,20020616 01:02:14,00511494264,210.52.232.51,210.53.43.76,6212,0203
7355558

00ads000108@tom,20020617 20:51:00,20020617 21:01:13,00502494736,210.52.232.50,210.53.43.7,613,020373
55558

00ads000113@tom,20020618 22:48:38,20020618 22:49:07,00502495048,210.52.232.50,210.53.43.5,29,0208706
1000
------------------------------------
现在导入后要自动改成:
00ads000108@tom,2002-06-15 23:18:42,20020616 01:02:14,00511494264,210.52.232.51,210.53.43.76,6212,02037355558
00ads000108@tom,2002-06-17 20:51:00,20020617 21:01:13,00502494736,210.52.232.50,210.53.43.7,613,02037355558
00ads000113@tom,2002-06-18 22:48:38,20020618 22:49:07,00502495048,210.52.232.50,210.53.43.5,29,02087061000

也就是说其中的日期年月日之间要加一个"-",每条数据间的记录空行要去掉,后边的数要接到后边不能在第二行。
----------------------------------------
这个程序要怎么写?谁有这方面的程序代码或例子?能给我看看吗?因为急用,请大家帮帮我。谢谢。
 
1导入Tstringlist
2删除空行
3将55558等并入前一项
4给日期格式
5存新的文本文件
 
to linsb:
具体要如何做啊?我不太会。能简单的写一下吗?
最好能给我一个原型。能简单的帮我写一个吗?谢了。
best911@163.com
 
第一行的处理:
导入TStringlist后
以逗号分隔出三个字符串,第二个是日期和时间,再以空格分隔日期和时间,格式化日期为
新的格式,再合并字符串
分隔字符串的函数:extractstrings([char1],[char2],str,dest);
格式化日期:formatdatetime();
 
to youngsun:
能帮我写一个程序原型吗?我不是搞delphi的,所以不太明白。
 
1、2、5步:
procedure TForm1.Button1Click(Sender: TObject);
var
i, n: Integer;
s: TStringList;
begin
s := TStringList.Create;
s.LoadFromFile('a.txt');
i := 0;
while i < s.Count do begin
if length(trim(s)= 0 then
s.delete(i)
else
inc(i);
end;
s.SaveToFile('shuju.txt')
end;
 
给你完整的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
i, j: Integer;
s: TStringList;
begin
s := TStringList.Create;
s.LoadFromFile('b.txt');
i := 0;
while i < s.Count do begin
if length(trim(s))= 0 then
s.delete(i)
else if pos(',',s)= 0 then begin
j:=pos(',',s[i-1]);
s[i-1]:=copy(s[i-1],1,j)+copy(s[i-1],j+1,4)+'-'+copy(s[i-1],j+5,2)+'-'+copy(s[i-1],j+7,length(s[i-1])-j-6);
s[i-1]:=s[i-1]+trim(s);
s.delete(i);
end
else
inc(i);
end;
s.SaveToFile('shuju.txt')
end;
 
我的代码:
procedure TForm1.Button1Click(Sender: TObject);
var
slData,slTemp:TStringList;
strDate,strTime:string;
i : integer;
begin
slData := TStringList.Create;
slTemp := TStringList.Create;
slData.LoadFromFile('f:/data.txt');
i := slData.Count -1;
while i > 0 do
begin
slData.Strings := Trim(slData.Strings);
if Trim(slData.Strings) = '' then
slData.Delete(i);
if Pos(',',slData.Strings)= 0 then
begin
slData.Strings[i-1] := slData.Strings[i-1]+Trim(slData.Strings);
slData.Delete(i);
end;
dec(i);
end;
i := 0;
while (i < slData.Count-1) do
begin
ExtractStrings([','],[],pchar(slData.Strings),slTemp);
// 假定日期和时间总是8个字符长
strDate := Copy(slTemp.Strings[1],1,8);
strDate := Copy(strDate,1,4)+'-'+Copy(strDate,5,2)+'-'+Copy(strDate,7,2);
strTime := Copy(slTemp.Strings[1],10,8);
slData.Strings := slTemp.Strings[0]+','+
strDate+' '+strTime+','+
slTemp.Strings[2];
inc(i,2);
end;
slData.SaveToFile('f:/data.txt');
end;
 
to linsb:
太谢谢了。
但还有一个问题,就是我要选*.TXT文件,然后保存。我要像“打开”一样选TXT文件并在保存可以可自己定文件名。
我知道要用OpenDialog 和 SaveDialog,但不知代码怎么写。
还有就是我用了一个richedit,我想把转换完的txt内容显示在里边。要怎么做?

最后,谢谢你的帮忙。很高兴能认识你。希望能你和做朋友,共同学习DELPHI。
我的QQ:341567
 
原来一二行是一行啊,我....[:I]
 
to youngsun
谢谢谢谢谢谢谢谢谢谢!:)
还有一个问题,如上贴,我要怎么才能实现?
其中的richedit改用成listbox可以吗?要怎么做?
 
richedit1.Lines.Assign(slData);
if opendialog1.Execute then
richedit1.Lines.LoadFromFile(opendialog1.FileName);
if savedialog1.Execute then
richedit1.Lines.SaveToFile(savedialog1.FileName);
 
richedit1.lines.text:=s.text;
 
if opendialog1.Execute then
s.LoadFromFile(opendialog1.FileName);


if savedialog1.Execute then
s.SaveToFile(savedialog1.FileName);
 
to youngsun & linsb:
button1:点后选择TXT文件
button2:保存TXT文件
button3:格式转换
richedit1:放TXT内容
---------------------
现在我想要实现:
点button1后TXT内容读出并显示在richedit1里。
点button3后richedit1里的内容格式改变。
点button2后把richedit1里的内容保存出来。
要如何才能实现?
 
if opendialog1.Execute then
listbox1.Items.LoadFromFile(opendialog1.FileName);

for i:=0 to s.count-1 do
listbox1.Items.add(s);

 
具体关键代码都给你了,我想你可以自己完成了!这样你会得到更多的东西。
 
收到,谢谢。请收分。
 
搞定,可能算法不是最优,但是切实可行,在Windows2000+D6下运行通过:
{注:我记的好象有个函数可以直接将类似'20020615'的字符串直接转换为日期型,可是我忘了,
只好一步步用Copy去截取了,哪位帮忙找找这个函数}
procedure TForm1.Button1Click(Sender: TObject);
var
sTxt, sDate: string;
slTmp, slTxt: TStrings;
i, j: integer;
begin
Memo1.Clear;
Memo2.Clear;
slTmp := TStringList.Create;
slTxt := TStringList.Create;
{读入文件,文件名改为你自已的文件名}
slTmp.LoadFromFile('wind2000.txt');
{将下行字符加到上一行(隔三行加)}
j := 1;
while j <= slTmp.Count - 1 do
begin
slTmp[j - 1] := slTmp[j - 1] + slTmp[j];
Inc(j, 3);
end;
{删除不需要的数据,也就是只保留需要的数据第3*i行}
for i := 0 to slTmp.Count - 1 do
begin
if i mod 3 = 0 then
slTxt.Add(slTmp);
end;
slTmp.Clear;
for i := 0 to slTxt.Count - 1 do
begin
slTmp.Delimiter := ',';
slTmp.DelimitedText := slTxt;
sDate := slTmp[1]; //第一个日期
sDate := Copy(sDate, 1, 4) + '-' + Copy(sDate, 5, 2) + '-' + Copy(sDate, 7, 2);
slTmp[1] := sDate;
sDate := slTmp[3]; //第二个日期
sDate := Copy(sDate, 1, 4) + '-' + Copy(sDate, 5, 2) + '-' + Copy(sDate, 7, 2);
slTmp[3] := sDate;
{组合}
sTxt := slTmp[0];
for j := 1 to slTmp.Count - 1 do
begin
if (j = 2) or (j = 4) then //日期和时间中间是空格
sTxt := sTxt + ' ' + slTmp[j]
else
sTxt := sTxt + ',' + slTmp[j];
end;
slTxt := sTxt;
// Memo2.Lines.AddStrings(slTmp); //测试用
end;
{保存成你想要的文件名}
slTxt.SaveToFile('guguda.txt');
// Memo1.Lines.Assign(slTxt); //测试用
slTmp.Free;
slTxt.Free;
end;
 
后退
顶部