【问题标题】:Save List<string> and List<double> to a .txt file's specific column将 List<string> 和 List<double> 保存到 .text 文件特定列
【发布时间】:2013-10-17 23:31:43
【问题描述】:

我有一个 C# WinForm 应用程序,它有很多 List&lt;string&gt;List&lt;double&gt;。我需要创建一个新的 .txt 文件并将每个 List&lt;&gt; 保存到文本文件的特定列中。

我尝试了 WriteAllLines 函数,但它写入了一个 List&lt;&gt;

我还尝试创建一个 Excel 文件,以便我可以指定要将 List&lt;&gt; 保存到哪一列。但是我很难将临时 excel 文件保存为 .txt 文件。

我知道此代码可以将现有的 excel 文件保存为 PDF,但不存在将 excel 保存为文本文件的类似功能。

NewExcelWorkBook.ExportAsFixedFormat(Excel.XlFixedFormatType.xlTypePDF, "Holdings in BE Import Format.txt", Excel.XlFixedFormatQuality.xlQualityStandard, true,
                                                          false, 1, 10, true);

请告诉我如何将多个List&lt;&gt; 写入特定的.txt 文件列,或者您可以告诉我如何将excel 文件保存为.txt 文件。跳过临时 excel 文件是理想的,但如果直接写入 .txt 很难,这种解决方案是可以接受的。

非常感谢!

【问题讨论】:

  • 所以当你说你有多个列时,你的意思是你有一个 csv 文件(列是逗号或制表符分隔的)?列表的长度是否相等?
  • 列是制表符分隔的,假设我需要将 List test1 保存到第 1 列,并将 List test2 保存到第 75 列。所以这些列之间会有制表符。列表长度不等。
  • 文件是否已经存在并且您想在特定列中“放置”一个列表?
  • 我需要新建一个 .txt 文件。

标签: c# excel text


【解决方案1】:

如果您希望第一列的大小固定为 20 个字符,您可以尝试以下方法:

List<string> stringList = new List<string>
    {
        "ABCDEF",
        "DEF",
        "GHIAAAAAAAAAAAAAA",
        "SOMETHNG LONGER THAN 20 characters",
    };

List<double> doubleList = new List<double>
    {
        1d,
        2,
        3,
        4
    };

List<string> combined = new List<string>();
int count = stringList.Count >= doubleList.Count ? stringList.Count : doubleList.Count;
for (int i = 0; i < count; i++)
{
    string firstColumn = stringList.Count <= i ? "" : stringList[i];
    string secondColumn = doubleList.Count <= i ? "" : doubleList[i].ToString();
    if (firstColumn.Length > 20)
    {
        //truncate rest of the values
        firstColumn = firstColumn.Substring(0, 20);
    }
    else
    {
        firstColumn = firstColumn + new string(' ', 20 - firstColumn.Length);
    }
    combined.Add(string.Format("{0} {1}", firstColumn, secondColumn));
}

File.WriteAllLines("yourFilePath.csv", combined);

输出文件如下:

ABCDEF               1
DEF                  2
GHIAAAAAAAAAAAAAA    3
SOMETHNG LONGER THAN 4

【讨论】:

  • 我现在可以解决不同长度的问题了。请告诉我如何将每个列表保存到特定列。我不能使用逗号分隔每一列。说 StringList 从第 1 列开始,doubleList 从第 20 列开始。谢谢!
  • @Eddie,我猜你想写入一个文本文件,如果这些列到目前为止是一部分,那么你是否正在尝试更新现有文件?您还需要 excel 或文本文件中的解决方案吗?文本文件中没有列的概念。您可以在两个列表之间放置 20 个逗号,但我认为这没有意义。
  • 我需要创建一个新的文本文件。解决方案文件格式为 .txt。您可以查看文本文件中的状态栏并查看 Line 和 Col #。我可以在两者之间放置 20 个空格,但这使得第二个列表不是从某个列开始,因为第 1 列中的字符串的字符数不同。
  • 实际上,我可以使用第一列创建一个新的文本文件。然后通过添加与第一列相距 20 个空格的新列来更新文件。你觉得这行得通吗?
  • @Eddie,我不确定你的要求,但你可以试试我刚刚放在答案中的新编辑
【解决方案2】:
        List<string> list1 = new List<string>();
        List<int> list2 = new List<int>();
        //...
        string separator = "\t";
        using (StreamWriter writer = new StreamWriter(fileName)){
            for (int i = 0; i<Math.Max(list1.Count, list2.Count); i++){
                var element1 = i < list1.Count ? list1[i] : "";
                var element2 = i < list2.Count ? list2[i].ToString() : "";
                writer.Write(element1);
                writer.Write(separator);
                writer.WriteLine(element2);
            }
        }

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 2015-01-12
    • 2013-12-07
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多