首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

请问一段关于文件操作的代码,多谢

2012-03-27 
请教一段关于文件操作的代码,谢谢。有一个文本文件名字为1.012内容为12345 , 品名 , 001 ,0,0,13,14

请教一段关于文件操作的代码,谢谢。
有一个文本文件   名字为   1.012   内容为
"12345 ", "品名 ", "001 ",0,0,13,14
"12345 ", "规格 ", "002 ",0,0,23,24
"12345 ", "商标 ", "003 ",0,0,33,34
"12346 ", "品名 ", "001 ",0,0,43,44
"12346 ", "规格 ", "002 ",0,0,53,54
"12346 ", "重量 ", "003 ",0,0,63,64
"12347 ", "品名 ", "001 ",0,0,73,74
"12347 ", "规格 ", "002 ",0,0,83,84
"12347 ", "商标 ", "003 ",0,0,93,94
.
.
.
大概1000多行
有一个ADOQuery   *qu打开获取的记录集
f1             f2           f3         d1   d2     d3   d4
12345     品名       001       11     12     0     0
12345     规格       002       21     22     0     0
12345     商标       003       31     32     0     0
12346     品名       001       41     42     0     0
12346     规格       002       51     52     0     0
12346     重量       003       61     62     0     0
12347     品名       001       71     72     0     0
12347     规格       002       81     82     0     0
12347     商标       003       91     92     0     0
.
.
.
我想实现一下的操作
将1.012文件中,凡是第一列的名字+第三列的名字和qu数据集中的f1+f3对应的
将qu数据集中的d1和d2的数字替换掉1.012文件中对应第4和第5列中的0的数据
1.012文件替换后就变成
"12345 ", "品名 ", "001 ",11,12,13,14
"12345 ", "规格 ", "002 ",21,22,23,24
"12345 ", "商标 ", "003 ",31,32,33,34
"12346 ", "品名 ", "001 ",41,42,43,44
"12346 ", "规格 ", "002 ",51,52,53,54
"12346 ", "重量 ", "003 ",61,62,63,64
"12347 ", "品名 ", "001 ",71,72,73,74
"12347 ", "规格 ", "002 ",81,82,83,84
"12347 ", "商标 ", "003 ",91,92,93,94
.
.
.

请问这个该怎么弄?

[解决办法]
文本倒入到list里再比较
[解决办法]
用兩個TStringList就可以吧?第一個的設置為
TStringList *list1=new TStringList;
TStringList *list2=new TStringList;
list1-> LoadFromFile( "1.012 ");
list1-> Delimiter= ", ";
list1-> DelimitedText=list1-> Text;
list2-> LoadFromFile( "ADOQuery *qu ");
list2-> DelimitedText=list2-> Text;
for(int i=0,i <list1-> count;i=i+7)
{
第一列 list1-> Strings[i]; list2-> Strings[i]
第2列 list1-> Strings[i+1];list2-> Strings[i+1];

}

[解决办法]
只是做个简单的比较而已
把1.012的内容放在一个TStringlist中 如 sg1
把select出来的内容放在另一个TStringList中 如 sg2

对sg1中的数据进行循环取出来 到 sg2中进行比对


如 "12345 ", "品名 ", "001 ",0,0,13,14
12345,品名, 001, 11, 12, 0, 0

比对的时候用ExtractStrings把逗号抽出来 剩余内容放在一个StringList里 如下
TStringList *values_tmp1 = new TStringList();
ExtractStrings(TSysCharSet() < < '= ', TSysCharSet() < < ' ', sg1-> Strings[i].c_str(), values_tmp1);

TStringList *values_tmp2 = new TStringList();
ExtractStrings(TSysCharSet() < < '= ', TSysCharSet() < < ' ', sg2-> Strings[i].c_str(), values_tmp2);

比较values_tmp1和values_tmp2中的第0列和第2列是否相同
如果相同 那把sg1中的内容做修改
[解决办法]
上面写错了
ExtractStrings(TSysCharSet() < < '= ', TSysCharSet() < < ' ', sg1-> Strings[i].c_str(), values_tmp1);

换成
ExtractStrings(TSysCharSet() < < ', ', TSysCharSet() < < ' ', sg1-> Strings[i].c_str(), values_tmp1);
[解决办法]
fscanf(..., "%s,%s,%s,%d,%d,%d,%d\n ",...)取字符串
[解决办法]
上面的大哥
取字符串的话 比较是不是比较麻烦呢 还要向比较匹配的记录里插数据

热点排行