帮忙看看cout的问题:只输出了后面的,没出前面的

cheqiang 2008-05-13 05:51:02
用来解析一个文件,循环获取每行记录,并将根据char(7)进行分割的字段,解析出来,并打印,
循环的代码:

char inBuf[2069];
char* result[20];
strcpy(inBuf,line.c_str());
int i=split(7,inBuf,result,maxColumn);
cout<<"行:"<<line<<endl;
cout<<"列数:"<<i<<endl;
cout<<"custContactId="<<result[0]<<"|"<<endl;
cout<<"tradeId="<<result[1]<<"|"<<endl;
cout<<"execTime="<<result[2]<<"|"<<endl;
cout<<"traceTypeCode="<<result[3]<<"|"<<endl;
cout<<"traceRoute="<<result[4]<<"|"<<endl;

输出结果是:
【首次循环】
行:2008032117321234567820080321123456782008-03-21 17:33:280123*34#3234
列数:5
custContactId: 20080321173212345678
acceptMonth: 3
tradeId: 2008032112345678
execTime: 2008-03-21 17:33:28
traceTypeCode: 0
traceRoute: 123*34#3234
【第二遍打印】
2008032117321234567820080321123456792008-03-21 17:33:280123*34#3234
列数:5
20080321173212345678
acceptMonth: 3
tradeId: 2008032112345679
execTime: 2008-03-21 17:33:28
traceTypeCode: 0
traceRoute: 123*34#3234

问题:
第一遍的时候:有“行:”,下面也有:“custContactId:”,内容正确
第二遍的时候:解析的结果正确,但少了“行:”,和“custContactId:”,不明白为什么!!

...全文
134 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjy1204 2008-05-14
  • 打赏
  • 举报
回复
程序运行一切正常..vs2003
cheqiang 2008-05-14
  • 打赏
  • 举报
回复
晕!!!狂晕!!!

我开始用editplus打开的文件,所以没看到每行前面多了个\r

用UE打开之后,就看到了!郁闷了我3天,才发现是文件格式有问题!


实在对不住各位了!!!

马上给分!!
cheqiang 2008-05-14
  • 打赏
  • 举报
回复
我的机器上发现,
第一行是71的长度
第二行以后是72的长度

第二行以后多了一个\r(13)

按道理,每次回车换行应该只有:\r\n才对啊
但我发现第二行以后是:\r\n\r。不知道是文件格式的问题?还是什么
  • 打赏
  • 举报
回复
用你的数据代码解析结果
行:20080321173212345678
列:5
result[0]=20080321173212345678
result[1]=2008032112345678
result[2]=2008-03-21 17:33:28
result[3]=0
result[4]=123*34#3234
行:20080321173212345678
列:5
result[0]=20080321173212345678
result[1]=2008032112345678
result[2]=2008-03-21 17:33:28
result[3]=0
result[4]=123*34#3234
行:20080321173212345678
列:5
result[0]=20080321173212345678
result[1]=2008032112345678
result[2]=2008-03-21 17:33:28
result[3]=0
result[4]=123*34#3234
行:20080321173212345678
列:5
result[0]=20080321173212345678
result[1]=2008032112345678
result[2]=2008-03-21 17:33:28
result[3]=0
result[4]=123*34#3234
行:
列:1
result[0]=
cheqiang 2008-05-14
  • 打赏
  • 举报
回复
20080321173212345678|2008032112345678|2008-03-21 17:33:28|0|123*34#3234
20080321173212345678|2008032112345678|2008-03-21 17:33:28|0|123*34#3234
20080321173212345678|2008032112345678|2008-03-21 17:33:28|0|123*34#3234
20080321173212345678|2008032112345678|2008-03-21 17:33:28|0|123*34#3234

要用这个数据才行。
cheqiang 2008-05-14
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int split(char sp, char *line, char **lst, int lst_len)
{
int i;

lst[0] = line;
for (i=1; *line; line++) {
// cout<<*line<<endl;
if (*line == sp) {
*line = '\0';
if (i >= lst_len) break;
lst[i++] = line + 1;
}
}
return i;
}

int main(int argc, char *argv[])
{
int i, len;
//char line[] = "abcadef2|jdfjsdlkf3|jdsjfsj4|jdsfjsdjf5|tss6";
char *result[50];


ifstream in("1.ctr");
while (!in.eof())
{
string inBuf;
getline(in,inBuf,'\n');
char input[200];
strcpy(input,inBuf.c_str());
len=split('|',input,result,50);
string tmp=input;

cout<<"行:"<<tmp<<endl;
cout<<"列:"<<len<<endl;
for (i=0; i<len; i++)
//printf("%s\n", result[i]);
cout<<"result["<<i<<"]="<<result[i]<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}


生成个文件来解析:
1.ctr文件内容:

1|2|3
a|b|c

即可进行测试。

我明白是我split解析出来的数据的问题,cout时组成BUFFER时,后面的数据,把“行:”给覆盖掉了。但我没分析出细节,麻烦帮分析一下。多谢!
zhoufuguo8802 2008-05-13
  • 打赏
  • 举报
回复
没遇见过这种问题,最好能贴出来有问题的代码以及数据
cheqiang 2008-05-13
  • 打赏
  • 举报
回复
那我晚上写个简单的测试代码,再帖上来!现在这个太长了。

zhangbin_115 2008-05-13
  • 打赏
  • 举报
回复
pass
cheqiang 2008-05-13
  • 打赏
  • 举报
回复
晕,我咋看不到楼上的回复??????

统计有问题???
  • 打赏
  • 举报
回复
没遇见过这种问题,最好能贴出来有问题的代码以及数据

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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