当值内的字符串很少时访问列表值

问题描述 投票:0回答:2

所以我有以下代码:

  void ReadFromCsv()
            {

                using (var reader = new StreamReader(@"d:\test.csv", Encoding.Default))
                {
                    List<string> listA = new List<string>();
                    while (!reader.EndOfStream)
                    {
                        var line = reader.ReadLine();
                        var values = line.Split(';');                    
                        listA.Add(values[0]);                      
                    }
                    Console.WriteLine(listA);         
                }
            }

它正在从我的 csv 文件中读取,我得到的一行示例是:

50,2,10,201,10,9090339,24-OCT-21 09.38.38.679000 AM,123456789,24/10/2021 09:39:23,22/10/2021 09:39:37,Sm123456789-SM-20211031-VSR-000123.pdf,,,,,26/01/2022 13:08:58,,2,,0

首先,为什么行尾有很多逗号? 其次,如果我想访问该字符串行的值“10”(这是第五个值)怎么办,这可能吗? 或者更进一步,我的任务是检查第 5 个值,例如,如果它是 5,我想获取 5thvalue=5 的每一行并为它们创建一个 csv,如果 5thvalue=10 我想为它们创建一个 csv那些记录,等等。但一次一项任务,我如何访问该值?

c# .net csv .net-core
2个回答
0
投票

1:行尾周围的逗号表示行的第一项为空

""

2:你可以得到第5个值,如下:

 string _list = "50,2,10,201,10,9090339,24-OCT-21 09.38.38.679000 AM,123456789,24/10/2021 09:39:23,22/10/2021 09:39:37,Sm123456789-SM-20211031-VSR-000123.pdf,,,,,26/01/2022 13:08:58,,2,,0";

 var fiveIndex = _list.Split(',')[4];

3: 然后你可以获得值为

fiveIndex

的行列表
var result =_list.Split(',').Select((v, i) => new { value = v, index = i }).Where(item => item.value == fiveIndex);

在您的示例中,第 3 行和第 5 行的值为 10(索引=2,索引=4)。然后您可以将这些行保存在

csv file
中。

enter image description here


0
投票

最终做了:


            string chargeMonth = DateTime.Now.ToString("yyyyMM");
            var fileCreationDate = DateTime.Now.ToString("yyyyMMdd");
            string fileCreationTime = DateTime.Now.ToString("HHmmss");
            string constVal = "MLL";
            string fileType = "HIYUV-CHEVRA";
            string[] values;
            string header, sumRow;
            string line, compId;
            string inputFile = "records.CSV";
            Dictionary<string, System.IO.StreamWriter> outputFiles = new Dictionary<string, System.IO.StreamWriter>();
            using (System.IO.StreamReader file = new System.IO.StreamReader("D:\\" + inputFile, Encoding.Default))
            {
                header = file.ReadLine();
                while ((line = file.ReadLine()) != null)
                {
                    values = line.Split(",".ToCharArray());
                    compId = values[3];
                    if (!outputFiles.ContainsKey(compId))
                    {
                        string outputFileName = constVal + "-" + fileType + "-" + (String.Format("{0:00000}", Int32.Parse(compId))) + "-" + chargeMonth + "-" + fileCreationDate + "-" + fileCreationTime + ".CSV";
                        outputFiles.Add(compId, new System.IO.StreamWriter("D:\\" + outputFileName));
                        outputFiles[compId].WriteLine(header);
                    }
                    outputFiles[compId].WriteLine(line);
                }
            }
            foreach (System.IO.StreamWriter outputFile in outputFiles.Values)
            {
                outputFile.Close();
            }

任务完成。

© www.soinside.com 2019 - 2024. All rights reserved.