请问 如何读取每行第二个数据? 如何实现这样的要求?

bborn 2005-07-26 09:00:23
数据格式是这样的
data1,data2,........
....................


数据是用逗号隔开的
每行的个数不知道 但是是统一的

如何按要求读入每行 特定列的数据?
...全文
230 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjf1010 2005-07-29
  • 打赏
  • 举报
回复
写错了,fscanf(fp,"%d",buf);应该是fscanf(fp,"%s",buf);
粗心大意!!!!!
hjf1010 2005-07-29
  • 打赏
  • 举报
回复
楼主还没有确定使用那种方案吗??
昨天特意试验了一下.
在文本文件中,数字和字符都可以读为字符串,比如
fscanf(fp,"%d",buf);可以将一行读到缓冲区中,遇到"\n"结束,但是不把"\n"读到字符串中;
但是也可以使用fscanf进行格式化读取,楼主不是想读第一个逗号后第二个逗号前的数据码
用fscanf(fp,"%d,%d,%s\n",&iTmp,&num,buf);可以实现对每行的格式化读取,num就是需要的数据,第二个逗号后的所有东西读到缓冲区中.
fgets可以实现和fscanf相似的功能,不同点,fgets可以控制每次读取的字符数,遇到"\n"也结束,但是把"\n"也读到缓冲区.

综上所述,如果文档是格式化比较好的用fscanf完全可以满足楼主的要求
bborn 2005-07-29
  • 打赏
  • 举报
回复
加80分结贴
bborn 2005-07-29
  • 打赏
  • 举报
回复
谢谢楼上各位 尤其是 黑色狂人 我看到那个帖子你的程序了


我试一下 弄好了就揭帖
bborn 2005-07-28
  • 打赏
  • 举报
回复
问题是我不是甲方
LoveYouJustOneDay 2005-07-28
  • 打赏
  • 举报
回复
气死人啊
这么简单的东西

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
FILE *fp;
char sd[1000], *p, *q;
int data[100], index=0, i;
fp=fopen("test.txt", "r");
while( fgets(sd, 1000, fp) )
{
p=sd;
while(*p++ != ',');
q=p;
while( (*q != ',') && (*q != '\0') ) q++;
*q = '\0';
sscanf(p, "%d", &data[index++]);
}
fclose(fp);
for(i=0; i<index; i++)
printf("%d ", data[i]);
system("PAUSE");
return 0;
}


test.txt

1,15,16,17
1,1
1,2,3
4,5,6,7,8
45,46
101,102,103



如果数据是字符串
sscanf( )里的 %d 用 %s
data[i]用指针
char *data[100];
data[i] 根据 字符串的长度动态分配
sjw7474235 2005-07-28
  • 打赏
  • 举报
回复
你可以在写文本时候给每个数据规定长度。读取的时候不就简单了吗。。
我用vb实现过。当时不会数据库只能用这个方法来存取数据。
bborn 2005-07-28
  • 打赏
  • 举报
回复
还是不行 再等几天
ken0426 2005-07-26
  • 打赏
  • 举报
回复
楼主说的应该是CSV格式吧!
zyfire88 2005-07-26
  • 打赏
  • 举报
回复
楼主的数据是放哪的,说清楚一点啊
login__whf 2005-07-26
  • 打赏
  • 举报
回复
up
megaboy 2005-07-26
  • 打赏
  • 举报
回复
楼主的数据很可能不是字符形式存储的,假设都是int数据,可以用:

fscanf("%d,",&data[0]);来读取。
csjOscar_boco 2005-07-26
  • 打赏
  • 举报
回复

char ch;
char temp[20];

打开文件

while(不是文件尾){
while (读取字符ch不是','){
指向下一个字符;
}
i=0;
while (读取字符ch不是',')
{
temp[i]=ch;
i++;
}
temp[i]='\0';
判断回车到下一行;
}

代码自己写,很简单
hjf1010 2005-07-26
  • 打赏
  • 举报
回复

以下是算法:
先用fgets()读取一行到一个数组
再用strstr()找到第一个','
用一个指针ptr指向这个逗号后一位,再以这个指针ptr及strstr()找到','
读取ptr指向的、逗号之前的字符
循环,依次类推,得到所有行
ywchen2000 2005-07-26
  • 打赏
  • 举报
回复
写个split函数
WecanHuang 2005-07-26
  • 打赏
  • 举报
回复
那就找逗号,记录逗号的个数和位置
PMsg 2005-07-26
  • 打赏
  • 举报
回复
原数据存储在哪?文件里还是数组

要是数组就比较简单了 2D数组
for(i=0;i<n;i++)

xx[i][2] //i行的第2个
LoveYouJustOneDay 2005-07-26
  • 打赏
  • 举报
回复
如果data不是字符串

fgets读入一行到内存

sscanf( )一下

把第一个数据用一个临时变量吸收掉就好了
yyy790601 2005-07-26
  • 打赏
  • 举报
回复
每行数据个数不固定,怎么fscanf?

我同意楼上前面这个说法:

以下是算法:
先用fgets()读取一行到一个数组
再用strstr()找到第一个','
用一个指针ptr指向这个逗号后一位,再以这个指针ptr及strstr()找到','
读取ptr指向的、逗号之前的字符
循环,依次类推,得到所有行
hjf1010 2005-07-26
  • 打赏
  • 举报
回复
fscanf(fp,"%d,%d,%s\n",&temp,&dest,str)
加载更多回复(1)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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