我想打开一个csv文件并比较第一行的内容。 我有代码打开已编写的文件,我只是不知道如何将第一行与打开文件中的strcmp进行比较。
打开文件
#include <stdio.h>
#include <stdlib.h>
int main(void) {
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
FILE *f;
char file_name[255];
char data[127];
printf("Which file you want to open : ");
scanf("%s",file_name);
f = fopen("C:\\projekt\\datei.csv","r");
if(f == NULL){
printf("Could not open %s\n" ,file_name);
exit(0);
}
while( fgets(data, sizeof(data), f) != 0 )
fputs(data, stdout);
return 0;
}
文件中的内容
"Date" "Time" "Volt" "Amp" "Wirkfaktor"
26.10.13 08:00:00 237.802 1160.7682 0.7461853792
26.10.13 08:00:01 237.658 1168.92273 0.7203561543
26.10.13 08:00:02 237.815 1158.57273 0.7344799394
26.10.13 08:00:03 237.566 1174.5682 0.6960312563
26.10.13 08:00:04 238.063 1151.67273 0.80126914
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
FILE *f;
char file_name[255];
char data[127];
printf("Which file you want to open : ");
scanf("%s",file_name);
f = fopen("C:\\projekt\\datei.csv","r");
if(f == NULL){
printf("Could not open %s\n" ,file_name);
exit(0);
}
while( fgets(data, sizeof(data), f) != NULL ){
//fputs(data, stdout);
}
int good = 1;
int i;
char heading[5][20];
if ( sscanf( data, "%19s%19s%19s%19s%19s", heading[0], heading[1], heading[2], heading[3], heading[4] ) != 5 )
{
good = 0;
}
if ( good )
{
char *expected[5] = { "\"Date\"t\"Time\"t\"Volt\"t\"Amp\"t\"Wirkfaktor\"" };
for ( i = 0; i < 5; i++ )
if ( strcmp( expected[i], heading[i] ) != 0 )
good = 0;
}
if ( !good )
{
printf( "Heading line is incorrect\n" );
exit( 0 );
}
return 0;
}
答案 0 :(得分:0)
要验证文件的第一行是否正确,请先使用sscanf
提取五个字符串,然后使用strcmp
将字符串与预期的字符串进行比较。
int good = 1;
char heading[5][20];
if ( sscanf( data, "%19s%19s%19s%19s%19s", heading[0], heading[1], heading[2], heading[3], heading[4] ) != 5 )
good = 0;
if ( good )
{
char *expected[5] = { "\"Date\"", "\"Time\"", "\"Volt\"", "\"Amp\"", "\"Wirkfaktor\"" };
for ( i = 0; i < 5; i++ )
if ( strcmp( expected[i], heading[i] ) != 0 )
good = 0;
}
if ( !good )
{
printf( "Heading line is incorrect\n" );
exit( 1 );
}
答案 1 :(得分:0)
strtok
将第一行拆分为标记,然后使用{{1将这些标记与您希望它包含的字符串进行比较}}。下面列出了此代码。strcmp
,假设第一行是制表符分隔的。"\"Date\"\t\"Time\"\t\"Volt\"\t\"Amp\"\t\"Wirkfaktor\""
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *f;
char file_name[255];
char data[127];
char dataRef[]="26.10.13 08:00:00 237.802 1160.7682 0.7461853792";
main()
{
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
f = fopen("datei.csv","r");
if(f == NULL){
printf("Could not open %s\n" ,file_name);
exit(0);
}
while( fgets(data, sizeof(data), f) != 0 )
{
fputs(data, stdout);
if (strncmp(dataRef,data,56)==0)
{
printf(" Here's the tip's between the file chain and the stack reference chain ....");
fputs(data, stdout);
fputs(dataRef, stdout);
printf("\n");
}}}
注意:在新代码中,我已经取消了主要军团中的自动声明,导致我的vc6 compilo对这个内部声明感到耻辱。 我想,我写了一个简短的解决方案,你的想象力。无论如何你都可以解释strcmp或strncmp的使用,它与formting属性具有相同的功能。见到你。