C语言数据读取
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言数据读取相关的知识,希望对你有一定的参考价值。
在C中如何从txt文件中读取一行数据并忽略数据外内容?谢谢
QTextCodecQTextCodec 类提供文本编码之间的转换。
QT使用Unicode来存储,绘制以及操作字符串。在很多情况下,你可能想要使用不同的编码方式来处理数据。例如大部分的日语文件都被存储在 Shift-JIS或者 ISO2022的文件中,而俄罗斯的用户常常使用KOI8-R或者CP1251编码方式。QT提供了一个QTextCodec 类集合来从Unicode格式转化到相应的格式。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
代码部分
#include
#include
#include
#include
int main()
QFile file("test.txt");
if (file.o_ReadOnly|IO_Raw))
QTextStream floStream(&file);
QString line;
QTextCodec *codec=QTextCodec::codecForName("GBK");
floStream.setCodec(codec);
while ( floStream.atEnd()==0 )
line = codec->fromUnicode(floStream.readLine());
qWarning(line);
file.close();
return 0;
参考技术A 用getline函数可以实现追问
但是这样就不能忽略数值外的内容了啊?
C语言文件的文本怎么读取?
血崩了,我连读取都不会,后面还要计算,怎么弄呢?
根据你给的文件保存的数据的格式,我猜测每一行是一个学生的信息,格式如下:
序号 姓名 成绩1 成绩2 成绩3 ...
知道了题意和题目要求,那么一切将会变得简单起来,请看代码。
#include <stdio.h>#define READ_FILE "data.txt" /* 要读取的文件的名字 */
#define WRITE_FILE "T_data.txt" /* 要写入的文件的名字 */
#define STU_NUM 10 /* 最大学生人数 */
#define MAX_LEN 50 /* 一行的最大字符数 */
/*
* 获取总分函数
*/
int get_sum(char const *msg)
int sum = 0;
int tmp;
/*
* 遍历一行字符
*/
while ( *msg != '\\0' )
/*
* 以空格为一项成绩的分隔标志
*/
tmp = 0;
while ( *msg != ' ' && *msg != '\\0' )
/*
* char类型数字转int类型数字
*/
tmp = ( tmp * 10 ) + ( ( *msg ) - '0' );
msg++;
/*
* 求总和
*/
sum += tmp;
if ( *msg == '\\0' )
break;
msg++;
return sum;
int main(void)
FILE *rfp, *wfp; /* 声明读取/写入文件指针 */
char student[STU_NUM][MAX_LEN]; /* 存放读取到的数据缓存数组 */
char ch;
int sum[STU_NUM]; /* 成绩总和 */
int i = 0;
int j = 0;
int k = 0;
rfp = fopen(READ_FILE, "r"); /* 打开数据文件 */
if ( rfp == NULL )
perror(READ_FILE);
exit(1);
for ( i = 0; i < STU_NUM; i++ )
sum[i] = 0;
/*
* 逐个字符读取文件的内容,
* 直至遇到文件结束符为止。
*/
i = 0;
while ( ( ch = fgetc(rfp) ) != EOF )
/*
* 遇到换行符表示已经读取完一个学生的资料;
* 否则继续将数据写入缓存数组中。
*/
if ( ch == '\\n' )
student[i][j] = '\\0';
j = 0;
i += 1;
else
student[i][j++] = ch;
student[i][j] = '\\0';
wfp = fopen(WRITE_FILE, "w");
/*
* 开始分析数据
* 根据文件存放数据的格式,从下标为2的位置开始分析数据。
* 当遇到空格时证明后面的数据是成绩,每一科成绩分数均以空格分开。
* printf是显示出来。
* fprintf是写入另一个文件。
*/
for ( j = 0; j <= i; j++ )
k = 2;
printf("%c%c", student[j][0], student[j][1]);
fprintf(wfp, "%c%c", student[j][0], student[j][1]);
while ( student[j][k] != ' ' )
printf("%c", student[j][k]);
fprintf(wfp, "%c", student[j][k]);
k++;
printf("\\'s sum of score sum is ");
fprintf(wfp, "\\'s sum of score sum is ");
sum[j] = get_sum(&student[j][k]);
printf("%d\\n", sum[j]);
fprintf(wfp, "%d\\n", sum[j]);
/*
* 记得关闭文件哦。
*/
fclose(rfp);
fclose(wfp);
return 0;
以下是运行结果:
这个程序仅仅是针对你的题目要求来的,文件存放的数据格式不能更改,否则会出错。每一行必须以回车键结束,最后一行的最后一个字符之后什么也不能有。我尽量以你看得懂的方法来写,关键部分都带有注释,有问题不要追问了,自己多思考思考,实在解决不来还是很欢迎可以追问的哦,哈哈哈!!!
追答后面多打了一个sum,不过不影响。
追问你能解释下为啥我那个不能逗号吗?我爸逗号消掉然后就可以做下去了,但还是谢谢你哈
追答首先你要知道scanf,这个叫格式化输入。也就是说输入是有一个格式的,你加逗号的话可以把文件中的空格换成逗号,去了解一下格式化输入输出就知道了
参考技术A fscanf格式串里的逗号不能要追问为啥啊?好迷,结构体输入时也不逗号...我记得以前数组那一块可以的
以上是关于C语言数据读取的主要内容,如果未能解决你的问题,请参考以下文章