将列表数组的内容输出到文本文件吗?

时间:2019-03-02 02:43:18

标签: c# arrays list file-io text-files

我目前有一个列表数组,如下所示:

List<string>[] phase2 = new List<string>[200];

其中一些列表是使用字符串(每个8个)初始化的,如下所示:

phase2[0] = new List<string>() { "Bob", "Complex", "B", "AOT", "Yes", "Yes", "Yes", "Yes", };
phase2[1] = new List<string>() { "Joe", "Complex", "B", "AOT", "Yes", "Yes", "Yes", "Yes" };
phase2[2] = new List<string>() { "Bill", "Complex", "A", "AOT", "Yes", "Yes", "Yes", "Yes" };

我正在尝试将每个列表的内容写入.txt文件,并且碰到了我的知识...我希望每行“列表”都在一行上。我知道如何将数组写入文件,将列表写入文件,但不能同时写入两者。我很乐意帮助您解决这一问题。

3 个答案:

答案 0 :(得分:0)

听起来您想使用一个“嵌套”的foreach循环,但是不清楚是要它们写入两个单独的文件还是要它们写入同一文件。我将做第二个:

foreach (List<string> currentList in phase2)
{
     foreach (string currentElement in currentList)
     {
          //change this out to whatever file output technique you use.               
          Console.Write currentElement + ",";
     }
   //starts a new line
   Console.Write "\n"
}

这应该使您知道去哪里(假设您要以列/行样式编写每个列表的内容)。除非您有特殊原因,否则我几乎坚持使用定界符。您可以使用任何字符,但是坚持使用标准(,; | [tab])分隔列实际上只是确保与将来的应用程序兼容。

如果您不想使用分隔符,则只需删除+“,”部分。

将Console.Write命令替换为File输出内容。

答案 1 :(得分:0)

请参见下面的“ ConcatToString”函数:

  export class TableComponent implements OnInit { 
      @Input() student;  
      @Input() length;  
      @Input() PageEvent;  
      @Input() pageSize;
      @Input() pageSizeOptions;   
      @ViewChild(MatSort) sort: MatSort;  
      dataSource;   
      p;  
      displayedColumns: string[] = ['name', 'family',
     'score'];   
      constructor() { }   
      ngOnInit() {
         this.dataSource = new MatTableDataSource(this.student);
         this.dataSource.sort = this.sort;   
      }  

      applyFilter(filterValue: string) {
         this.dataSource.filter = filterValue.trim().toLowerCase();   
      }
      Page($event) {
         this.PageEvent.emit(this.p);  
      } 
  }

答案 2 :(得分:0)

正如@ swily-drifting指出的那样,遍历2D数据结构时,您将需要使用嵌套循环。根据您的需要,它可以是foreach,传统的for甚至是while

但是,如果您不关心内存分配或性能(在仅处理200行时似乎是这种情况),则可以使用FileLINQ来实现。请注意,LINQ提供了更加用户友好的API,但是对于这个问题,在后台,它仍然使用嵌套循环。

足够的话。这是一个示例:

private static void WriteToFile(string filePath, List<string>[] content)
{
    using (var fileWriter = new StreamWriter(filePath))
    {
        foreach (var line in content)
        {
            if (line == null)
            {
                continue;
            }

            for (var i = 0; i < line.Count; i++)
            {
                fileWriter.Write(line[i]);

                if (i != line.Count - 1)
                {
                    fileWriter.Write(',');
                }
            }

            fileWriter.WriteLine();
        }
    }
}

private static void WriteToFileOneLiner(string filePath, List<string>[] content)
{
    File.WriteAllLines(filePath, content.Where(line => line != null).Select(line => string.Join(',', line)));
}

public static void Main(string[] args)
{
    List<string>[] phase2 = new List<string>[200];
    phase2[0] = new List<string>() { "Bob", "Complex", "B", "AOT", "Yes", "Yes", "Yes", "Yes", };
    phase2[1] = new List<string>() { "Joe", "Complex", "B", "AOT", "Yes", "Yes", "Yes", "Yes" };
    phase2[2] = new List<string>() { "Bill", "Complex", "A", "AOT", "Yes", "Yes", "Yes", "Yes" };

    WriteToFile(@"C:\Path\to\my\file.txt", phase2);
    WriteToFileOneLiner(@"C:\Path\to\my\file_oneliner.txt", phase2);
}