delphi DBE ascii drv 的问题,250 分,着急!!!(250分)

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

gsmgxm

Unregistered / Unconfirmed
GUEST, unregistred user!
我的文件结构
'A1'#9'A2'#9'A3'#9'A4'#9....#0D#0A
'1'#9'34'#9'3'#9....#0D#0A
'23'#9'4'#9'23'#9......#0D#0A
.
.
用DBE ASCIIDRV 读入TABLE,但在DBGRID中只有一个
纪录一个字段,就是文本文件的所有内容,我又试着
将#9换成',',但没有用。
看过大富翁以前的讨论,没有得到有力的帮助,请大虾
们帮帮忙,看问题在那里?急!!!
 
ascii数据库(.txt)必须要有结构描述文件(.sch)的支持吧?
比如你这个结构文件名为table1.txt,那么你应该创建table1.sch文件,
其内容类似于这样(假定用“,”号分隔)——
[table1]
Filetype=VARYING
Delimiter='
Separator=,
CharSet=ascii
Field1=Text1,Char,2,00,00
Field2=Text2,Char,2,00,02
Field3=Text3,Char,2,00,04
Field4=Text4,Char,2,00,06
 
to jqw:没用过ADO,能不能给个例子完成TXT的倒入
to dq:详细说明一下.sch 每行的含义,我才能使一下
 
to gsmgxm: 帮你Copy一段资料——

格式定义文件

ASCII数据驱动的格式定义文件包含了定义文件类型(逗号分隔或者固定长度)和定义字段。
为了使程序能够知道格式定义文件,格式定义文件的文件名必须与数据文件同名,
并使用SCH为扩展名。其中定义的描述如下:

File name: 被一对方括号包含,这个设置定义ASCII文件的名称。数据文件的扩展名必须为TXT。
Filetype 定义ASCII文件的结构。
FIXED 固定格式
VARYING 变化格式
Delimiter: 定义字符串的分隔符,通常为双引号
Separator 定义字段间的分隔符,通常为逗号
CharSet: 定义语言驱动程序,通常为ASCII
定义文件下部分为字段定义。ASCII文件的每一行都是一条记录。字段定义提供BDE分配虚拟字段内存空间的信息。
字段定义的描述如下:
Field: 虚拟的字段名,总是以Field加一个整形数字。如Field1。第一个Field为Field1。
Field name: 定义显示的字段名。
Field type: 定义数据的BDE类型。
名称 类型描述
CHAR 字符串
FLOAT 64位的浮点型
NUMBER 16为的整数
BOOL 逻辑型,为True或False
LONGINT 32位的整形
DATE 日期字段
TIME 时间字段
TIMESTAMP 日期+时间字段
(日期和时间格式为BDE设置中设置的格式.)
Data value length: 最大的字段长度。
Number of decimals: 适用于浮点数,定义小数点的位数
Offset: 描述起始位值
例如有一数据文件的第一字段为字符串,字段名为“Text”,最大长度为3个字符,没有小数点(字符串类型总是没有小数点),并起始偏移量为0(因为是第一字段)。所以定义如下:
Field1=Text,Char,3,00,00
下面是一个具有三个字段的格式定义文件,第一个字段为字符串,第二、三字段为日期型字段,格式定义文件如下(ASCII文件名为DATES.TXT,所以SCH文件名为DATES.SCH):
[DATES]
Filetype=VARYING
Delimiter="
Separator=,
CharSet=ascii
Field1=Text,Char,3,00,00
Field2=First Contact,Date,10,00,03
Field3=Second,Date,10,00,13
这个格式定义文件为逗号分隔的文件。注意计算偏移量和小数点的定义。
一个ASCII逗号分隔的文件的偏移量不再是ASCII文件中的真正偏移量,但是这个长度参数将定义此字段的最大长度,并且有利于内存的管理。
 
qd:谢谢,我先研究一下
 
to dq: 谢谢你
但我的文件字段有1百多个并且不定,定义起来太费力气
有没有其它好办法,我已经开始编程读取。
 
有没有其他办法,希望大家多多讨论
 
你把它读进一个Table,是想把它完全当做表处理还是仅仅为了显示处理的方便?
——这两个目的的不同对编程的努力方向影响很大的。
 
to dq:是为了处理表数据
 
如果不想写出.sch文件,那就相当于自己要写一个ascii文本数据库的驱动程序啊!
这个编程量你可要考虑清楚,不比写出这个.sch文件小。
——虽然给出数据定义是累了点(主要是枯燥)但是对以后程序的维护还是很有好处的,
而且自己写的驱动程序跟VCL的相比,恐怕……;当然,如果你对这个很感兴趣,不妨试一试。

所以如果你是为了完全的数据库操作的目的,建议你还是先做点儿体力劳动吧:)
 
问题是文本文件中的字段的个数是不确定的
 
个数不确定?!那字段类型怎么确定的?都设为ftString型?字段长度怎么定?都一样?
如果全部用等长的ftString,那也不难办,每次读之前动态创建.sch文件——
先用从数据文件里读入一行(第一个回车之前),因为有分隔标志,
那么得到分隔标志的个数加1不就是字段个数么;
至于分隔标志个数的取得可以结合Pos和Copy函数实现。
然后就是固定信息加上FieldX=FieldX,Char,nLen,00,nLen*(X-1)这样的字符串列表的拼接操作了。
这些都可以用一个TStrings保存,最后SaveToFile就行了。
 
接受答案了.
 
后退
顶部