【问题标题】:How to make first row(string) and first column(string) of file as Index of 2d array in C如何将文件的第一行(字符串)和第一列(字符串)作为C中二维数组的索引
【发布时间】:2014-12-08 20:14:40
【问题描述】:

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

    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] 中搜索以获取值。它工作得很好,但我觉得我的代码有点复杂。我正在寻找尽可能简单的代码。有人可以建议吗。

提前致谢, 湿婆

【问题讨论】:

  • 制作索引和名称的对应表。

标签: c arrays string file search


【解决方案1】:

我今天使用的一个方法是:

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

【讨论】:

    【解决方案2】:
         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;  
         }
    

    【讨论】:

    • 因为,我没有得到任何我发布的答案,我觉得有点复杂,但它对我来说很好......
    【解决方案3】:

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

    【讨论】:

    • 感谢您的宝贵建议。仅供参考,我声明了浮点类型的二维数组,并通过 atof() 获取值,正如我在上面的代码中提到的那样。 Column_2[j]= atof(Col2); Column_3[j]= atof(Col3);谢谢,
    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多