如何使用strcmp比较csv数据中的名称

时间:2015-09-30 18:24:01

标签: c csv strcmp

我想打开一个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;


}   

3 个答案:

答案 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)

  1. 如果您只是想查看它是否包含这5个字符串,可以考虑使用strtok将第一行拆分为标记,然后使用{{1将这些标记与您希望它包含的字符串进行比较}}。下面列出了此代码。
  2. 如果您尝试获取该特定字符串,那么比较第一行的字符串将是strcmp,假设第一行是制表符分隔的。
  3. "\"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属性具有相同的功能。见到你。