纯文本格式英语四级词汇词典文本如何改成便于检索的自定义文件格式?

ooolinux 2018-06-24 08:39:28
纯文本格式英语四级词汇词典文本内容如下,如何改成便于检索的自定义文件格式?检索主要以单词为关键字,查找音标和/或释义。先不考虑数据库。
——————————
大学英语四级词汇

abandon [4'b1nd4n]
vt. 丢弃;遗弃;放弃

abandoned [4'b1nd4nd]
adj. 被抛弃的

ability [4'biliti]
n. (U)能力,本领;(C)才能,才智

able ['eib4l]
adj. 能够…的,有能力的

abnormal [1b'n3:m4l]
adj. 反常的,异常的

aboard [4'b3:d]
adv./prep. 在船(或飞机、车)上; 上(船/飞机/车)
...全文
954 60 打赏 收藏 转发到动态 举报
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2018-06-28
  • 打赏
  • 举报
回复
引用 64 楼 DelphiGuy 的回复:
[quote=引用 59 楼 u010165006 的回复:]
[quote=引用 56 楼 DelphiGuy 的回复:]
曾经差不多12000+吧,我上学的时候考过一次GRE,1170,属于中等偏低一些的成绩,不过现在很多不常用的词都忘了,除了专业方向,也就化学方面的词还记得多一些,当时选修过一门量子化学(纯属好奇,不知道这东西有啥用)。


老概是计算机专业还是什么专业的硕士?有没出去读个博士?[/quote]

cs专业的,当年的gscas,现在叫ucas(不是英国那个ucas),我的GRE成绩,出去不容易申请到好学校,搞不好硕士还要重读,那时候刚好赶上第一波互联网泡沫,就跟着老板出去创业了。
[/quote]

创业搞的是网站服务还是桌面软件?你好像研究过破解解密之类的?
  • 打赏
  • 举报
回复
引用 59 楼 u010165006 的回复:
[quote=引用 56 楼 DelphiGuy 的回复:]
曾经差不多12000+吧,我上学的时候考过一次GRE,1170,属于中等偏低一些的成绩,不过现在很多不常用的词都忘了,除了专业方向,也就化学方面的词还记得多一些,当时选修过一门量子化学(纯属好奇,不知道这东西有啥用)。


老概是计算机专业还是什么专业的硕士?有没出去读个博士?[/quote]

cs专业的,当年的gscas,现在叫ucas(不是英国那个ucas),我的GRE成绩,出去不容易申请到好学校,搞不好硕士还要重读,那时候刚好赶上第一波互联网泡沫,就跟着老板出去创业了。
ooolinux 2018-06-28
  • 打赏
  • 举报
回复
引用 66 楼 DelphiGuy 的回复:
[quote=引用 65 楼 u010165006 的回复:]
创业搞的是网站服务还是桌面软件?你好像研究过破解解密之类的?


汽车导航、PDA、PACS之类乱七八糟的都做过,不过老板毕竟是学校出去的,思路有,但是圈钱的能力差点,也没搞出啥大名堂。破解只是上学时期搞过一点,为了改个游戏之类的。
[/quote]

还是搞技术安稳,钱来的快者,去的也快。
  • 打赏
  • 举报
回复
引用 65 楼 u010165006 的回复:
[quote=引用 64 楼 DelphiGuy 的回复:]
[quote=引用 59 楼 u010165006 的回复:]
[quote=引用 56 楼 DelphiGuy 的回复:]
曾经差不多12000+吧,我上学的时候考过一次GRE,1170,属于中等偏低一些的成绩,不过现在很多不常用的词都忘了,除了专业方向,也就化学方面的词还记得多一些,当时选修过一门量子化学(纯属好奇,不知道这东西有啥用)。


老概是计算机专业还是什么专业的硕士?有没出去读个博士?[/quote]

cs专业的,当年的gscas,现在叫ucas(不是英国那个ucas),我的GRE成绩,出去不容易申请到好学校,搞不好硕士还要重读,那时候刚好赶上第一波互联网泡沫,就跟着老板出去创业了。
[/quote]

创业搞的是网站服务还是桌面软件?你好像研究过破解解密之类的?[/quote]

汽车导航、PDA、PACS之类乱七八糟的都做过,不过老板毕竟是学校出去的,思路有,但是圈钱的能力差点,也没搞出啥大名堂。破解只是上学时期搞过一点,为了改个游戏之类的。
ooolinux 2018-06-27
  • 打赏
  • 举报
回复
引用 46 楼 zhao4zhong1 的回复:
44425个单词,每个单词占20个字节:
1997-08-12 13:35 888,500 ENGLISH
1997-08-12 13:35 888,500 CHINESE
2 个文件 1,777,000 字节
顺序检索一遍,不到1秒种,还优化个毛啊!


老赵这是炫耀词汇量亚~
1997年老赵还在读研?
ooolinux 2018-06-27
  • 打赏
  • 举报
回复
引用 44 楼 DelphiGuy 的回复:
用CB的话可以用TClientDataSet,内存数据表,支持load/save文件,文件支持二进制或者xml格式,简单说就是支持数据库操作但不需要外部驱动、不需要配置。


BCB 6.0有TClientDataSet吗?文件支持二进制,是什么类型文件?
ooolinux 2018-06-27
  • 打赏
  • 举报
回复
引用 43 楼 donjin9 的回复:
可以在打开程序时,判断txt文件的修改时间,是否需要重新解析文本。
trie树前缀匹配挺好的。


这个一般来说可以有。
ooolinux 2018-06-27
  • 打赏
  • 举报
回复
引用 42 楼 xuzuning 的回复:
你都 二进制文件 了
还管 内存数据结构还是外存文件格式?
一个内存映射或序列化就互通了


ok
赵4老师 2018-06-27
  • 打赏
  • 举报
回复
44425个单词,每个单词占20个字节:
1997-08-12 13:35 888,500 ENGLISH
1997-08-12 13:35 888,500 CHINESE
2 个文件 1,777,000 字节
顺序检索一遍,不到1秒种,还优化个毛啊!
  • 打赏
  • 举报
回复
用CB的话可以用TClientDataSet,内存数据表,支持load/save文件,文件支持二进制或者xml格式,简单说就是支持数据库操作但不需要外部驱动、不需要配置。
donjin9 2018-06-27
  • 打赏
  • 举报
回复
可以在打开程序时,判断txt文件的修改时间,是否需要重新解析文本。
trie树前缀匹配挺好的。
ooolinux 2018-06-27
  • 打赏
  • 举报
回复
引用 62 楼 paschen 的回复:
[quote=引用 61 楼 ooolinux的回复:][quote=引用 58 楼 paschen 的回复:]
[quote=引用 38 楼 ooolinux的回复:][quote=引用 36 楼 paschen 的回复:]
1、可以预先记录好各单词所在行的行号,直接去对应行取单词

2、直接按二进制方式存各个KEY及各个VALUE,首次查词时重新构建map/unordered_map,整体来说比解析文本的效率是要高的,因为你可以把格式设置成固定的,不需要去解析文本(如在哪一行)
举个例子,假设最长单词是16个字符,你每个单词可以这样存在文件中:先有一个char[16],之后有一个int(表示其余信息的偏移量,其余信息可放到最后),这样你要找第N个单词,直接从文件头移动(sizeof(char[16])+sizeof(int))*N个字节就行


知道行号的话,也无法fseek快速定位。
文件头+偏移量的思路可以考虑。[/quote]
那就预先记录各单词开始的偏移,不过直接处理文本文件还是不推荐[/quote]

预先记录各单词开始的偏移,就怕txt文本会被用户编辑(比如添加中文释义)导致偏移失效。[/quote]
如果允许用户修改的话,那确实会是个问题,如果不允许,最好就用二进制,这样一般用户并不知道怎么去改。

如果允许修改,可以计算一个文件HASH值,如果这个值变了,则需要重新计算偏移,否则可以直接使用以前的记录。[/quote]

这个思路可以有。
paschen 2018-06-27
  • 打赏
  • 举报
回复
引用 61 楼 ooolinux的回复:
[quote=引用 58 楼 paschen 的回复:]
[quote=引用 38 楼 ooolinux的回复:][quote=引用 36 楼 paschen 的回复:]
1、可以预先记录好各单词所在行的行号,直接去对应行取单词

2、直接按二进制方式存各个KEY及各个VALUE,首次查词时重新构建map/unordered_map,整体来说比解析文本的效率是要高的,因为你可以把格式设置成固定的,不需要去解析文本(如在哪一行)
举个例子,假设最长单词是16个字符,你每个单词可以这样存在文件中:先有一个char[16],之后有一个int(表示其余信息的偏移量,其余信息可放到最后),这样你要找第N个单词,直接从文件头移动(sizeof(char[16])+sizeof(int))*N个字节就行


知道行号的话,也无法fseek快速定位。
文件头+偏移量的思路可以考虑。[/quote]
那就预先记录各单词开始的偏移,不过直接处理文本文件还是不推荐[/quote]

预先记录各单词开始的偏移,就怕txt文本会被用户编辑(比如添加中文释义)导致偏移失效。[/quote] 如果允许用户修改的话,那确实会是个问题,如果不允许,最好就用二进制,这样一般用户并不知道怎么去改。 如果允许修改,可以计算一个文件HASH值,如果这个值变了,则需要重新计算偏移,否则可以直接使用以前的记录。
ooolinux 2018-06-27
  • 打赏
  • 举报
回复
引用 58 楼 paschen 的回复:
[quote=引用 38 楼 ooolinux的回复:][quote=引用 36 楼 paschen 的回复:]
1、可以预先记录好各单词所在行的行号,直接去对应行取单词

2、直接按二进制方式存各个KEY及各个VALUE,首次查词时重新构建map/unordered_map,整体来说比解析文本的效率是要高的,因为你可以把格式设置成固定的,不需要去解析文本(如在哪一行)
举个例子,假设最长单词是16个字符,你每个单词可以这样存在文件中:先有一个char[16],之后有一个int(表示其余信息的偏移量,其余信息可放到最后),这样你要找第N个单词,直接从文件头移动(sizeof(char[16])+sizeof(int))*N个字节就行


知道行号的话,也无法fseek快速定位。
文件头+偏移量的思路可以考虑。[/quote]
那就预先记录各单词开始的偏移,不过直接处理文本文件还是不推荐[/quote]

预先记录各单词开始的偏移,就怕txt文本会被用户编辑(比如添加中文释义)导致偏移失效。
ooolinux 2018-06-27
  • 打赏
  • 举报
回复
引用 57 楼 DelphiGuy 的回复:
[quote=引用 55 楼 u010165006 的回复:]
[quote=引用 52 楼 DelphiGuy 的回复:]
[quote=引用 48 楼 u010165006 的回复:]
[quote=引用 44 楼 DelphiGuy 的回复:]
用CB的话可以用TClientDataSet,内存数据表,支持load/save文件,文件支持二进制或者xml格式,简单说就是支持数据库操作但不需要外部驱动、不需要配置。


BCB 6.0有TClientDataSet吗?文件支持二进制,是什么类型文件?[/quote]

有啊,这东西应该从D1、CB1时代就有的,最初设计目标是在本地缓存数据,但是也可以单独使用。二进制格式是它自定义的格式,类似数据库存储结构,也支持索引。
[/quote]

那还要使用它自定义的格式,未必适配~[/quote]

可以用DBGrid录入,或者从文本格式加载插入记录即可。
[/quote]

相当于一个数据库文件了?
如果程序移植就不够通用了。
ooolinux 2018-06-27
  • 打赏
  • 举报
回复
引用 56 楼 DelphiGuy 的回复:
曾经差不多12000+吧,我上学的时候考过一次GRE,1170,属于中等偏低一些的成绩,不过现在很多不常用的词都忘了,除了专业方向,也就化学方面的词还记得多一些,当时选修过一门量子化学(纯属好奇,不知道这东西有啥用)。


老概是计算机专业还是什么专业的硕士?有没出去读个博士?
paschen 2018-06-27
  • 打赏
  • 举报
回复
引用 38 楼 ooolinux的回复:
[quote=引用 36 楼 paschen 的回复:]
1、可以预先记录好各单词所在行的行号,直接去对应行取单词

2、直接按二进制方式存各个KEY及各个VALUE,首次查词时重新构建map/unordered_map,整体来说比解析文本的效率是要高的,因为你可以把格式设置成固定的,不需要去解析文本(如在哪一行)
举个例子,假设最长单词是16个字符,你每个单词可以这样存在文件中:先有一个char[16],之后有一个int(表示其余信息的偏移量,其余信息可放到最后),这样你要找第N个单词,直接从文件头移动(sizeof(char[16])+sizeof(int))*N个字节就行


知道行号的话,也无法fseek快速定位。
文件头+偏移量的思路可以考虑。[/quote] 那就预先记录各单词开始的偏移,不过直接处理文本文件还是不推荐
  • 打赏
  • 举报
回复
引用 55 楼 u010165006 的回复:
[quote=引用 52 楼 DelphiGuy 的回复:]
[quote=引用 48 楼 u010165006 的回复:]
[quote=引用 44 楼 DelphiGuy 的回复:]
用CB的话可以用TClientDataSet,内存数据表,支持load/save文件,文件支持二进制或者xml格式,简单说就是支持数据库操作但不需要外部驱动、不需要配置。


BCB 6.0有TClientDataSet吗?文件支持二进制,是什么类型文件?[/quote]

有啊,这东西应该从D1、CB1时代就有的,最初设计目标是在本地缓存数据,但是也可以单独使用。二进制格式是它自定义的格式,类似数据库存储结构,也支持索引。
[/quote]

那还要使用它自定义的格式,未必适配~[/quote]

可以用DBGrid录入,或者从文本格式加载插入记录即可。
  • 打赏
  • 举报
回复
曾经差不多12000+吧,我上学的时候考过一次GRE,1170,属于中等偏低一些的成绩,不过现在很多不常用的词都忘了,除了专业方向,也就化学方面的词还记得多一些,当时选修过一门量子化学(纯属好奇,不知道这东西有啥用)。
ooolinux 2018-06-27
  • 打赏
  • 举报
回复
引用 52 楼 DelphiGuy 的回复:
[quote=引用 48 楼 u010165006 的回复:]
[quote=引用 44 楼 DelphiGuy 的回复:]
用CB的话可以用TClientDataSet,内存数据表,支持load/save文件,文件支持二进制或者xml格式,简单说就是支持数据库操作但不需要外部驱动、不需要配置。


BCB 6.0有TClientDataSet吗?文件支持二进制,是什么类型文件?[/quote]

有啊,这东西应该从D1、CB1时代就有的,最初设计目标是在本地缓存数据,但是也可以单独使用。二进制格式是它自定义的格式,类似数据库存储结构,也支持索引。
[/quote]

那还要使用它自定义的格式,未必适配~
加载更多回复(46)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧