我有一个包含此类数据的文件
{0 / Data1 /,0x00,0,0xFF},
{1 / data2 /,0x00,0,0xFF},
{2 / data3 /,0x00,0,0xFF},
{3 / data4 /,0x00,0,0xFF}, ...
我想只打印每行的第二列和最后一列。以下是我工作的代码。它的印刷全线。如何编辑只打印每行的第二列和最后一列。
#include<stdio.h>
#include<conio.h>
int main ()
{
char filename[] = "file.txt";
FILE *file = fopen(filename, "r");
if(file!= NULL)
{
char line[128];
while ( fgets( line, sizeof line, file)!= NULL)
{
fputs ( line,stdout);
}
fclose(file);
}
else
{
perror(filename);
}
getch();
return 0;
}
请帮助!
非常感谢!
答案 0 :(得分:1)
sscanf()应该可以做到这一点。
它使用与printf()类似的格式字符串,然后将值读入变量。
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int a, c, d, e;
char b[101] = "";
char filename[] = "file.txt";
FILE *file = fopen(filename, "r");
if (file != NULL) {
char line[128];
while (fgets(line, sizeof line, file) != NULL) {
sscanf(line, "{%d %100s , %x, %d, %x}", &a, b, &c, &d, &e);
printf("%d %X\n", d, e);
}
fclose(file);
} else {
perror(filename);
}
return 0;
}
答案 1 :(得分:0)
如果您的数据采用以下方式格式化:{0 / Data1 /,0x00,0,0xFF},您可以搜索数据行末尾的括号。
示例(不是完整的解决方案)
char data[] = "{0 /Data1/ , 0x00, 0, 0xFF},"
//find the back bracket position
int i=0;
while( i < strlen(data) && data[i]!='}')
i++;
if(i<strlen(data))
bracketposition = i;
当你发现括号倒带的位置为字大小时(如果它不是标准的空格搜索)并读取这两个位置之间的值(空白位置和支架位置)