1

我有一个文本文件,它由标签分隔的多行和 18 列数据组成。我使用了这段代码,它在单列中显示整个数据。我需要的是数据应该显示在列中。

public static List<string> ReadDelimitedFile(string docPath)
{
    var sepList = new List<string>();           

    // Read the file and display it line by line.
    using (StreamReader file = new StreamReader(docPath))
    {
        string line;

        while ((line = file.ReadLine()) != null)
        {

            var delimiters = new char[] { '\t' };
            var segments = line.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

            foreach (var segment in segments)
            {
                //Console.WriteLine(segment);
                sepList.Add(segment);
            }

        }

        file.Close();
    }
    // Suspend the screen.
    Console.ReadLine();
    return sepList;
}
4

4 回答 4

0

您在这样的一列中输出所有内容(伪代码,以说明结构):

while (reading lines)
  for (reading entries)
    WriteLine(entry)

也就是说,对于文件中的每一行以及该行中的每个条目,您都会输出一个新行。相反,您只想为文件中的每一行编写一个新行,并使用分隔符(制表符?)编写条目。更像这样的东西:

while (reading lines)
  for (reading entries)
    Write(entry)
  WriteLine(newline)

这样,文件中任何给定行的所有条目都在输出的同一行上。

当然,如何在输出中分隔这些条目取决于您。并且写回车可以像 一样简单Console.WriteLine(string.Empty),尽管我敢打赌还有很多其他方法可以做到这一点。

于 2013-11-09T13:07:02.077 回答
0

使用 dataGridView 似乎可以提供最好的 18 列。

 //  Create your dataGrodView with the 18 columns using your designer.

        int col = 0;
        foreach (var segment in segments)
        {
            //Console.WriteLine(segment);
            //sepList.Add(segment);

            dataGridView1.Rows[whateverRow].Cells[col].Value = segment;
        }
于 2013-11-09T13:08:20.183 回答
0

因此,根据您的代码,您有以下循环:

while{
   <reads the lines one by one>
   for each line{
       <reading each segment and adding to the list.>
   }
}

您的代码读取一行的每一段并附加到列表中。理想情况下,您应该有 18 列的 18 个列表。在java中,这个问题可以用hashmaps解决:

Hashmap <String, ArrayList<String>> hmp = new Hashmap<String, ArrayList<String>>();`

while(read each line){
    List<String> newList =  new ArrayList<String>
    foreach(segment as segments){
        newList.add(segment);
    }
    hmp.put(column1,segment); 
}
return hmp;

所以你会有hmp.put(column2, segment)hmp.put(column3, segment) 等等。

希望能帮助到你。

于 2013-11-09T13:31:58.917 回答
0

您应该为此使用DataTable或类似的类型,但如果您想使用List,您可以像这样“模拟”行和列:

var rows = new List<List<string>>();
foreach(var line in File.ReadAllLines(docPath))
{
    var columns = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries).ToList();
    rows.Add(columns);
}

这将为您提供类似行/列的结构

foreach(var row in rows)
{
    foreach(var column in row)
    {
       Console.Write(column + ",");
    }
    Console.WriteLine();
}
于 2013-11-09T13:22:23.463 回答