C语言读取TXT文件,忽略文件空格,把内容写入数组中应该怎么实现?

CaffeyChen 2015-05-31 02:49:58
#include <stdio.h>
#include <stdlib.h>

#define SIZE_view 50

struct view_info
{
int id;
char name[20];
int code;
char shortname[20];
char LName[100];
}views[SIZE_view];
void read()
{
FILE *fp;
int i;
fp=("1.txt",r);//接下来我想不到好的方法
}

这里是1.txt的内容,里面如果用fscanf格式化会读入空格,有没有什么好的方法,能把空格忽略,然后直接把其他内容读入views[i].id等等数组里面

1 哈尔滨 101 HaEB 哈大线,京哈线
2 长春 102 CHCH 哈大线,京哈线
3 沈阳 103 SHY 哈大线,京哈线
4 大连 104 DL 哈大线,京哈线
5 天津 105 TJ 京哈线,京沪线
6 北京 106 BJ 京哈线,京沪线,京广线,京福线
7 呼和浩特 107 HHHT 京西线,徐西线
8 乌鲁木齐 108 WLMQ 乌兰线
9 西宁 109 XN 京西线,徐西线
10 兰州 110 LZ 京西线,徐西线,乌兰线
11 西安 111 XA 徐西线,京昆线
12 郑州 112 ZHENGZ 京昆线,京广线,徐西线
13 徐州 113 XZH 徐西线,京沪线,京福线
14 上海 114 SHH 京沪线,南沪线,京福线
15 武汉 115 WH 京广线
16 成都 117 CHD 京昆线
17 昆明 116 KM 京昆线,昆柳线,昆福线
18 贵阳 118 GY 昆柳线,南成线,昆福线
19 株洲 119 ZHUZH 南沪线,京九线,昆福线
20 南昌 120 NCH 京福线,昆福线
21 福州 121 FZH 京福线,昆福线
22 广州 122 GUANGZ 京广线
23 深圳 123 SHZH 京广线
24 柳州 124 LZH 昆柳线,南沪线,南成线
25 南宁 125 NN   南沪线,南成线
26 赤峰 126 CHF 京赤线
27 北票 127 BP 沈票线
...全文
3236 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiqin-aoxuie 2018-02-22
  • 打赏
  • 举报
回复
为什么我用struct写了一个读取txt表格数据的程序运行时输出了许多不应该出现的数据呀?
xly120404126 2016-08-11
  • 打赏
  • 举报
回复
弄好了
xly120404126 2016-08-11
  • 打赏
  • 举报
回复
引用 5 楼 zhangxiangDavaid 的回复:
引用 4 楼 miss46799 的回复:
回复3楼,太赞!
能帮我看看我这个么?运行出来都是0,但p的值是对的,感觉像D矩阵写入不对,不知道哪里错了请各位指导一下 txt文件如下
0.5 -0.5 0.0 1.0 0.0 0.0
-0.5 -0.5 0.0 0.0 1.0 0.0
0.0 0.5 0.0 0.0 0.0 1.0
6个数一行,每个数之间都有一个空格 [code=c#include "stdafx.h" #include <stdio.h> #define MAXDATA 1000 double D[MAXDATA][6];// char ln[80];//用于存取读出数据的数组 FILE *f; int i,n; char *p; int main(){ f=fopen("D:\\todel\\opengl\\ConsoleApplication3\\Debug\\1.txt","r");//打开txt文件 if(NULL==f){ printf("Can not open file 1.txt!\n");//判断是否可以打开文件 return 1; } i=0; while (1){ if (NULL==fgets(ln,80,f)) break; p = ln ; sscanf(p,"%f%f%f%f%f",&D[i][0],&D[i][1],&D[i][2],&D[i][3],&D[i][4],&D[i][5]); i++; } n=i; for (i=0;i<n;i++){ printf("%f %f %f %f %f %f\n",D[i][0],D[i][1],D[i][2],D[i][3],D[i][4]),&D[i][5]; } fclose(f); return 0; }][/code]
苏叔叔 2015-05-31
  • 打赏
  • 举报
回复
引用 4 楼 miss46799 的回复:
回复3楼,太赞!
CaffeyChen 2015-05-31
  • 打赏
  • 举报
回复
回复3楼,太赞!
苏叔叔 2015-05-31
  • 打赏
  • 举报
回复
这样可好:

#include <stdio.h>
#include <stdlib.h>
#define SIZE_view 50
struct view_info
{
	int id;
	char name[20];
	int code;
	char shortname[20];
	char LName[100];
}views[SIZE_view];
FILE *f;
char buf[256];
char *p;
int i, n;
int main(void)
{
	if (NULL == (f = fopen("1.txt", "r")))
	{
		fprintf(stderr, "Can not open file : 1.txt");
		return 1;
	}
	i = n = 0;
	while (1)
	{
		if (n == SIZE_view) break;
		if (NULL == fgets(buf, 256, f)) break;
		if ('\n' == buf[0]) continue;     //空行继续
		p = buf;
		sscanf(p, "%d%s%d%s%s", &views[n].id, views[n].name, &views[n].code, views[n].shortname, views[n].LName);
		n++;
	}
	do
	{
		printf("%d %s %d %s %s\n", views[i].id, views[i].name, views[i].code, views[i].shortname, views[i].LName);
		i++;
	} while (i < n);
	fclose(f);
	return 0;
}
CaffeyChen 2015-05-31
  • 打赏
  • 举报
回复
buf是什么啊,我还不知道怎么用
FightForProgrammer 2015-05-31
  • 打赏
  • 举报
回复
你一行行读到自己的buf中,然后从buf中过滤空格解析到你的结构体
纯c读写ini配置文件 用c/c++读写ini配置文件有不少第三方的开源库,如iniparser、libini、rwini、UltraLightINIParser等,但都不理想,往往代码较大、功能较弱、 接口使用不方便。尤其在大小写处理、前后空格、各种注释、跨平台换行符支持、带引号字符串处理、无section操作、原格式保持等方面存在问题。 现将本人精心制作的ini读写程序源码奉献给大家,纯c编写,简洁好用。支持windows和linux。 主要特点: 1、支持;和#注释符号,支持行尾注释。 2、支持带引号'或"成对匹配的字符串,提取时自动去引号。引号中可带其它引号或;#注释符。 3、支持无section或空section(名称为空)。 4、支持10、16、8进制数,0x开头为16进制数,0开头为8进制。 5、支持section、key或=号前后带空格。 6、支持\n、\r、\r\n或\n\r换行格式。 7、不区分section、key大小写,但写入时以新串为准,并保持其大小写。 8、新增数据时,若section存在则在该节最后一个有效数据后添加,否则在文件尾部添加。 9、支持指定key所在整行删除,即删除该键值,包括注释。 10、可自动跳过格式错误行,修改时仍然保留。 11、修改时保留原注释:包括整行注释、行尾注释(包括前面空格)。 12、修改时保留原空行。以上三点主要是尽量保留原格式。 不足之处: 1、不支持单key多value(逗号分割),只能一次性提取后自行处理。 2、不支持同名重复section和key。(重复section可视为错误,重复key则可能造成分歧) 3、不能提取所有section或key名称。 使用只需两个文件inirw.h、inirw.c,另有测试程序和工程文件,支持windows和linux。

70,021

社区成员

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

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