如何将文件的第一行(字符串)和第一列(字符串)作为C中的2d数组的索引

时间:2014-10-14 06:25:08

标签: c arrays string file search

我想读取一个包含字符串和数字混合的文件,并将其存储到二维数组中。条件是第一行,第一列应作为我的2d数组的索引。这是示例文件。

    xx,yy 
aaa,10,11
bbb,12,13
ccc,14,15
ddd,16,17
eee,18,19

要清楚,我如何将字符串作为索引,我的数组应该给我这样的值

array[aaa][xx] = 10
array[bbb][yy] = 13... etc.,

这是我的方法

    FILE* fp1 = fopen("test.csv","r");
    if(fp1 == NULL)
    {
       printf("Failed to open file\n");
       return 1;
    }
    char s[1] = ",";
    fscanf(fp1,"%[^\n]",array);   //  Read first row alone
    token = strtok(array,s);

    while( token != NULL )
    {
       strArray[i] = strdup(token);  // First row stored in strArray[i]
       strcpy(strArray[i], token);

       token = strtok(NULL, s);
       i++;
    }  
    i=0;
    while((fscanf(fp2,"%[^,],%[^,],%[^\n]\n",Col1,Col2,Col3)>0))   // Reading File Column wise
    {
        Column_1[i][j]= strdup(Col1); 
        Column_2[j]= atof(Col2);
        Column_3[j]=atof(Col3);
        j=j+1;
    }

    for(i=0;i<1;i++)
    {
      for(j=0;j<=5;j++)
      {
        myArray[i][j] = Column_2[j];
      }
    }
    for(i=1;i<2;i++)
    {
      for(j=0;j<=5;j++)
      {
        myArray[i][j] = Column_3[j];     // Column 2 & 3 values stored in myArray[i][j]
      }
    }      

现在在第一列和第一行中搜索必需字符串并获取索引并使用索引在myArray [i] [j]中搜索以获取值。它工作得很好,但我觉得我的代码有点复杂。我正在寻找更简单的代码。有人可以建议吗。

先谢谢, 西瓦

3 个答案:

答案 0 :(得分:1)

由于我的知识有限,我真的不认为你可以声明char类型的二维数组并取int个值。相反,我建议去结构。 这是一个到结构的链接::(http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Structures) 另一个天真的解决方案是静态声明第一行和第一列,将输入作为字符并通过atoi()函数将其转换为整数。

答案 1 :(得分:0)

     FILE* fp1 = fopen("test.csv","r");
     if(fp1 == NULL)
     {
       printf("Failed to open file\n");
       return 1;
     }
     char s[1] = ",";
     fscanf(fp1,"%[^\n]",array);   //  Read first row alone
     token = strtok(array,s);

     while( token != NULL )
     {
       strArray[i] = strdup(token);  // First row stored in strArray[i]
       strcpy(strArray[i], token);

       token = strtok(NULL, s);
       i++;
     }  
     i=0;
     while((fscanf(fp2,"%[^,],%[^,],%[^\n]\n",Col1,Col2,Col3)>0))   // Reading File Column wise
     {
       Column_1[i][j]= strdup(Col1); 
       Column_2[j]= atof(Col2);
       Column_3[j]=atof(Col3);
       j=j+1;
     }

     for(i=0;i<1;i++)
     {
       for(j=0;j<=5;j++)
       {
         myArray[i][j] = Column_2[j];
       }
     }
     for(i=1;i<2;i++)
     {
       for(j=0;j<=5;j++)
       {
         myArray[i][j] = Column_3[j];     // Column 2 & 3 values stored in myArray[i][j]
       }
     } 
     printf("\n\nEnter Row_name to search\t");
     scanf("%s", Row_name);
     printf("\nEnter Column_name to search\t");
     scanf("%s", Column_name);     
     for(i=0;i<1;i++)
     {
       for(j=0;j<=5;j++)
       {
         if(strcmp(Row_name,Column_1[i][j]) == 0)
         {
           i_index = j;
         }
       }
     }
     for(i=0;i<3;i++)
     {
      if(strcmp(Column_name,strArray[i]) == 0)
      {
       j_index = i;

      }
     }
     printf("\nValue[%s][%s] is '%f'",Row_name,Column_name,myArray[j_index-1][i_index] );
     fclose(fp1);
     return 0;  
     }

答案 2 :(得分:0)

我今天使用的方法是:

string[][] values = new string[2][];//string = open value|new string = fill value
  int i = 0;      
        while (!sr.EndOfStream)
        {               
            strline = sr.ReadLine();
            values[i] = strline.Split(',');//'i' is row 1
            i++;// this is row too
            } };       
        }
        sr.Close(); // Release the file.
        Console.WriteLine(values[0][0]);//test your code with this value for row1 and column1