简单的读写文件问题,解决今天揭帖。

linmf66 2004-04-05 01:11:05
我在c盘下有2个txt文件;此:c:\a.txt和c:\b.txt。这两个文件里的内容是一些数字编码:
a.txt b.txt
.... ....
0544 1242
0622 0544
... . ...

现在我想把b.txt中有的并且a.txt中也有的数字编码抽出来写到c.txt文件中,并把a.txt中的与b.txt相同的数字编码删除去,怎么实现啊?

谢谢!
...全文
79 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzheng2001 2004-04-06
  • 打赏
  • 举报
回复
to sun1976(关羽): 经过一番讨论后还是学到了点东西,谢谢!
freedom2001 2004-04-06
  • 打赏
  • 举报
回复
还是导入到临时表里面去比较方便,我前一段时间也作过一个类似的东西,有两个文件,记录数都是上万,如果直接比较要很麻烦,而且处理速度比较慢,但是如果导入到表中来比较就快了很多,而且代码也简单了很多。导入的时候可以只导一个表,然后从另外一个文件读取进行比较
sun1976 2004-04-06
  • 打赏
  • 举报
回复
lzheng2001(1加1=0)
说请教就太客气了
我这方法属于歪门邪道偷工减料,只适用于比较少的数据,数据量太大字符串是装不下的:)

因为我做过的都是对比较小数据量的操作,所以没有明显的效率差值。只是通过循环次数比较可以发现少了一层循环,当a.txt数据量越大越能体现出执行的速度比较快。
字符串的长度0 to 2,147,483,647,b.txt 1条数据增加的字符串长度不超过20,可以支持b.txt中107,374,182调数据,数据量不过亿字符串变量不会溢出。但是我实际操作过的数据没有超过k数量级的,再大了数据窗口的filter会不会出问题没有实测过。

要是数据量实在太大,还是采用你提供的正统的方法放心一些,不过真时数据量那么大的时候还是导入到数据库临时表,用sql解决好,不然响应时间可就太长了
艳阳天11 2004-04-05
  • 打赏
  • 举报
回复
不用数据窗口就用临时表啊,最简单了。再不用临时表你就用两个数组来比较吧(最累最笨的办法)。
lzheng2001 2004-04-05
  • 打赏
  • 举报
回复
TO:sun1976(关羽) 兄
你的方法是我没想到的,也从未用过这么长的字符串作为DW的过滤条件,想请教:
1.不知这样DW的效率如何?
2.string 最大能有多少字符?如果文件比较大 ...
linmf66 2004-04-05
  • 打赏
  • 举报
回复
能不能不用数据窗口啊?????
云帆 2004-04-05
  • 打赏
  • 举报
回复
楼上的已经很清楚了!厉害,偶也学习学习。谢谢!
sun1976 2004-04-05
  • 打赏
  • 举报
回复
//首先备份你的a.txt b.txt然后照下面去做

建立外部数据源的数据窗口对象d_1,一个字段a,文本型,要够长
建立3个数据窗口dw_1,dw_2,dw_3其数据窗口对象都是d_1
string ls_filter1,ls_filter2
long l_1,l_2
dw_1.reset()
dw_2.reset()
dw_3.reset()
dw_1.importfile('c:\a.txt')
dw_2.importfile('c:\b.txt')
l_2=dw_2.rowcount()
ls_filter1='1=2 '
ls_filter2='1=1 '
for l_1=1 to l_2
ls_filter1=ls_filter1+" or a='"+dw_2.getitemstring(l_1,'a')+"' "
ls_filter2=ls_filter1+" and a<>'"+dw_2.getitemstring(l_1,'a')+"' "
next
//a.txt b.txt重复数据
dw_1.setfilter(ls_filter1)
dw_1.filter()
dw_1.saveas('c:\c.txt',text!,false)

//a.txt其余数据
dw_1.setfilter(ls_filter2)
dw_1.filter()
dw_1.saveas('c:\a.txt',text!,false)





lzheng2001 2004-04-05
  • 打赏
  • 举报
回复
改一下:
if dw1.object.data[i,1] = dw2.object.data[j,1] then
lzheng2001 2004-04-05
  • 打赏
  • 举报
回复
1.用dw.importfile(...)导入数据
2.设置DW的列为不重复列
rows1=dw_1.rowcount()
rows2=dw_2.roucount()
for i=1 to rows1 //dw1
for j=1 to rows2 //dw2
if dw1.object.data[1,i] = dw2.object.data[1,j] then
filewrite(...)
exit //第二重循环
end if
next
next

//如果要提高效率,还可考虑先将DW排序,然后改善上面代码 .
feixianzhi 2004-04-05
  • 打赏
  • 举报
回复
创建两个外部数据源将a和b文件分别导入两个数据窗口,然后再操作要简单得多!
myclife 2004-04-05
  • 打赏
  • 举报
回复
用数据窗口解决比较简单。

把两个文件分别读入数据窗口,然后进行比较去重等操作。

如果觉得操作数据窗口表达式不方便,还可以把数据窗口更新到数据库中的临时表(临时使用的表,不要误会)然后用数据库命令不用我说了吧。

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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