怎樣格式化輸入輸出文本文件﹐我要輸出后能直接用記事本看到文本文件。(請幫幫我﹗) (100分)

D

databox

Unregistered / Unconfirmed
GUEST, unregistred user!
文件格式如下﹕
ORD2001101811234789
A100
B100
ORD2001101811234790
A100
B100
C200
D200
第一排和第四排是一種格式﹐而其他的又是另一種格式。格式如下﹕
ORD表示訂單﹐20011018表示日期﹐11234790表示訂單號﹐這三個要分開
下面A100﹐表示A產品100﹐B產品100﹐而每張單可能根據數量不同而所占行數不同。
我知道能根據文件類型讀出文件﹐但格式又有一定變動﹐怎么做呢﹖我實在不想一行一行的
讀出來﹐再COPY分段﹐再判斷。
我試過﹐寫了一段代碼如下﹕
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type TOrder=record
No:string[5];
Name:string[10];
Number:string[4];
end;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
aa:array[0..2] of TOrder;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var f:File of TOrder;
i:integer;
begin
aa[0].No:='11111';
aa[0].Name:='The First';
aa[0].Number:='1000';
aa[1].No:='11112';
aa[1].Name:='The Second';
aa[1].Number:='2000';
aa[2].No:='11113';
aa[2].Name:='The Third';
aa[2].Number:='3000';
AssignFile(f,'d:/TOrder.txt');
ReWrite(f);
for i:=0 to 2 do
Write(f,aa);
CloseFile(F);
end;

end.
但發現三個數據在一排﹐并且是亂碼(不是文本格式)﹐我想怎么寫出去不是亂碼。分文本
方式好像又不行。這是照著格式寫﹐先解決此問題。
第二個問題﹐如何讀出像我上面要求的那樣﹐有一定格式但又有所不同﹐如何以格式化讀出﹖
注﹕文件是文本文件﹐所以我要寫進去也必須是文本格式﹐讀的也是文本格式。
謝謝大家﹗
 
先提个建议,可不可以把这个帖子发到设计模式版里去。
 
var
i : integer;
list1 : Tstrings;
begin
list1 := Tstringlist.create;
list1.loadfromfile(filename);
for i := 0 to list1.count-1 do
begin
//判断每行开头的字母就可以了,把它写进一个record 数组.
end;
list1.free;
end;
 
哪位大哥快快帮帮忙!若要一行一行的判断我自己也会。我是想问问可不可以存入类型化的
文本档,若可以存,这个类型还可不可以有大小的变化。谢啦!
 
输出的是类型文件,所以用记事本是乱码,但读出来会正常的。
 
我要輸出的也是文本﹐而且類型不一定一樣﹐能實現嗎﹖哪位能否答我一下﹐能不能也好
讓我死心﹐不過要說出理由﹗
 
肯定是要一行一行处理。
 
可以用本地库
主细表
也可以用clientdataset
加本地文件。
若想要txt文件,可以格式输出。
 
那我再問一下﹐能不能以格式化輸出﹐但是我看到的是文本文件而不是亂碼。像以上面
var f:File of TOrder;類似的格式輸出得到文本文件﹐行嗎﹖
 
哪位老大幫幫忙吧﹐我很急呀﹗
 
要静下心来,当中明细是不固定的你不一行行读怎么解决?
 
我現在要求的不是讀數據的問題﹐而是如何格式化輸入﹐輸出。以var f:File of TOrder的
方式輸出的是二進制文件﹐不是文本檔﹐我要求輸入﹐輸出都是文本檔。但用
var f:File of TOrder的方式輸入﹐輸出。或類似的﹐行嗎﹖
 
你的文件声明不对,应该是
var
myTextFile:TextFile;//声明一个名为myTextFile的文本文件
 
to yamazeki,若這樣聲明﹐我就不能輸出格式化的文本格式﹐我想輸出文本格式﹐但又是照
上面的類型輸出﹐這樣我寫起來就很簡單。行嗎﹖
 
为什么不用数据库?就用本地的.mdb.很方便的.
 
好像有个函数叫Format(..):string
查查帮助吧
他是做格式化文本的
 
我不想用數據庫﹐就想用文本文件。到底這樣做行不行﹐哪位吭一聲呀。
用f:File of TOrder;的方式得到文本文件﹐行不行﹖
 
我曾经一个程序中,这样输出格式串到txt文件:
Memo1.Lines.Append(format('%4s、',[Inttostr(i)])+Query1.FieldValues['CmpyName']+'( '+IntToStr(Query2.RecordCount)+' 份)');
Memo1.Lines.SaveToFile('d:/TotalCmpyFiles.txt')
结果为:
1、伟星实业发展有限公司( 17 份)
2、工美旅游产品有限责任公司( 2 份)
......
17、千里马人才信息服务中心( 5 份)
18、浙经资产评估有限公司( 7 份)
......
99、书店杭州分销店( 6 份)
100、研科信息技术开发有限公司( 4 份)
请注意序号占4个字符。
 
[blue][/blue]全是废话!没有 一个敢说自己是老大的,你们为什么不去看看我的问题,我问了一年了!没有
人回答真让我感觉到这里的技术是不是已经过时了,或者是这是这里的人已经不
是做编程的!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=719446
http://www.delphibbs.com/delphibbs/dispq.asp?lid=666070
http://www.delphibbs.com/delphibbs/dispq.asp?lid=716037
http://www.delphibbs.com/delphibbs/dispq.asp?lid=730641
http://www.delphibbs.com/delphibbs/dispq.asp?lid=655233
如果能有人回答这些问题才是真的高手呀!
 
将TOrder的声明改为:
type TOrder=record
No:array[0..4] of char;
Name:array[0..9] of char;
Number:array[0..3] of char;
end;
 
顶部