存储列数据的更好方法配置CSV文件以供以后搜索和使用

时间:2016-06-08 21:05:50

标签: c#

我的程序有一个CSV配置文件,我在启动时读入并存储到各种数组中供以后使用。它包含两列(现在)配对数据,如下所示:

1,10
2,14
3,11
蓝色,4-10202
红色,4-10001

在该文件的片段中,前三行仅使用一次,我执行以下操作:

int[][] BayPortMap = new int[10][]; 

for (int i = 0; i < 10; i++)
{
   BayPortMap[i] = new int[3];
}

var contents = File.ReadAllLines(@"C:\CSI\MotorTesterConfig.csv");
contents = contents.Where(x =>!string.IsNullOrEmpty(x.Trim(','))).ToArray();
var csv = from line in contents select line.Split(',');
int HeaderRows = 1;
foreach (var row in csv.Skip(HeaderRows))
{
   if (csvindex < 10)
   {
       BayPortMap[csvindex][0] = Convert.ToInt32(row[0]);
       BayPortMap[csvindex][1] = Convert.ToInt32(row[1]);
       BayPortMap[csvindex][2] = -1;
   }
}

现在这是我不喜欢的部分。我对接下来的两行做了同样的事情,但是后来在程序中我需要搜索第二列值,当我找到匹配时,我需要对第一列数据进行操作。因此,当用户扫描一个数字,即4-10002时,返回蓝色,然后对其进行操作。

MotorPNArray[index] = new string[2];
MotorPNArray[index][0] = row[0];
MotorPNArray[index][1] = row[1];

它会起作用但感觉很笨重。我稍后将要编写的另一个程序有许多“数据”列,需要根据匹配的PN来使用。

所以,我应该继续这样做还是使用别的东西,比如List等等。

1 个答案:

答案 0 :(得分:0)

使用词典

结束
Dictionary<string, string> MotorPNDict = new Dictionary<string, string>();

        int csvindex = 0;
        int HeaderRows = 1;
        foreach (var row in csv.Skip(HeaderRows))
        {
           if (csvindex < 10)
           {
              /* Here we get the Bay/Port mapping and store them in ascending order regardless of the CSV order, i.e. bay 1 will always be array position 0*/
              var index = Convert.ToInt32(row[0]) - 1;
              BayPortMap[index][0] = Convert.ToInt32(row[0]);
              BayPortMap[index][1] = Convert.ToInt32(row[1]);
              BayPortMap[index][2] = -1;
           }
           else
           {
              switch (csvindex)
              {
                 case 10:
                    {
                       TesterNumber = row[1];
                       break;
                    }
                 case 11:
                    {
                       ReportLocation = row[1];
                       break;
                    }
                 case 12:
                    {
                       DBSource = row[1];
                       break;
                    }
                 case 13:
                    {
                       InitialCatalog = row[1];
                       break;
                    }
                 default:
                    {
                       /* add Motor PNs and there corresponding types to a dictionary */
                       MotorPNDict.Add(row[1], row[0]);
                       break;
                    }
              }
           }
           csvindex++;
        }