从列表写入文本文件C#

从列表写入文本文件C#,c#,winforms,C#,Winforms,如何将整个列表编码到文本文件中,在每个数据位之间使用逗号?目前,它正在创建文件newData,但没有从列表中输入变量。这是我到目前为止所拥有的 public partial class Form1 : Form { List<string> newData = new List<string>(); } 下面是变量的来源 private void buttonSave_Click(object sender, EventArgs e) { newData.Add

如何将整个列表编码到文本文件中,在每个数据位之间使用逗号?目前,它正在创建文件newData,但没有从列表中输入变量。这是我到目前为止所拥有的

public partial class Form1 : Form {
  List<string> newData = new List<string>();
}
下面是变量的来源

private void buttonSave_Click(object sender, EventArgs e) {
  newData.Add (textBoxLatitude.Text);
  newData.Add (textBoxLongtitude.Text);
  newData.Add (textBoxElevation.Text);
  textBoxLatitude.Text = null;
  textBoxLongtitude.Text = null;
  textBoxElevation.Text = null;
}
作为对两个主要答案线程中讨论的回应,以下是我以前的代码中的一个示例,说明了处理CSV输出的更可靠的方法:

上面没有检查语法,但关键概念是
String.Join

 public const string Quote = "\"";

 public static void EmitCsvLine(TextWriter report, IList<string> values)
    {
        List<string> csv = new List<string>(values.Count);

        for (var z = 0; z < values.Count; z += 1)
        {
            csv.Add(Quote + values[z].Replace(Quote, Quote + Quote) + Quote);
        }

        string line = String.Join(",", csv);

        report.WriteLine(line);
    }
public const string Quote=“\”;
公共静态void EmitCsvLine(TextWriter报告,IList值)
{
列表csv=新列表(值.Count);
对于(变量z=0;z
如果使用
IEnumerable
,这可以变得更一般一些,但是在我采用这种形式的代码中,我没有必要这样做

You cannot output the list just by calling tw.WriteLine(newData);
作为对两个主要答案线程中讨论的回应,以下是我以前的代码中的一个示例,说明了处理CSV输出的更可靠的方法:

上面没有检查语法,但关键概念是
String.Join

 public const string Quote = "\"";

 public static void EmitCsvLine(TextWriter report, IList<string> values)
    {
        List<string> csv = new List<string>(values.Count);

        for (var z = 0; z < values.Count; z += 1)
        {
            csv.Add(Quote + values[z].Replace(Quote, Quote + Quote) + Quote);
        }

        string line = String.Join(",", csv);

        report.WriteLine(line);
    }
public const string Quote=“\”;
公共静态void EmitCsvLine(TextWriter报告,IList值)
{
列表csv=新列表(值.Count);
对于(变量z=0;z
如果使用
IEnumerable
,这可以变得更一般一些,但是在我采用这种形式的代码中,我没有必要这样做

You cannot output the list just by calling tw.WriteLine(newData);
但这样做可以实现:

tw.WriteLine(string.Join(", ", newData));
但这样做可以实现:

tw.WriteLine(string.Join(", ", newData));
你可以:

StringBuilder b = new StringBuilder();
foreach (string s in yourList)
{
    b.Append(s);
            b.Append(", ");
}

string dir = "c:\mypath";
File.WriteAllText(dir, b.ToString());
你可以:

StringBuilder b = new StringBuilder();
foreach (string s in yourList)
{
    b.Append(s);
            b.Append(", ");
}

string dir = "c:\mypath";
File.WriteAllText(dir, b.ToString());

您必须迭代列表(未测试)或按照其他用户的建议使用string.Join(然后需要将列表转换为数组)

private void saveToolStripMenuItem\u单击(对象发送方,事件参数e)
{
TextWriter tw=新的StreamWriter(“NewData.txt”);
for(int i=0;i
您必须迭代列表(未测试)或按照其他用户的建议使用string.Join(然后您需要将列表转换为数组)

private void saveToolStripMenuItem\u单击(对象发送方,事件参数e)
{
TextWriter tw=新的StreamWriter(“NewData.txt”);
for(int i=0;i
尽管您可以使用
字符串。加入
,正如其他人提到的,他们忽略了三件重要的事情:

  • 事实上,你真正想做的是写一个文件
  • 您正在接收的输入,以及输入中是否包含逗号
  • 如果对输入进行清理,则在将其写入文件时,线程上的当前区域性是什么
您想写一个逗号分隔的文件。这方面没有标准格式,但您必须小心字符串内容,尤其是在您需要用户输入的情况下。考虑以下输入:

latitude = "39,41"
longitude = "41,20"
有一个,所以这种输入是非常可能的,这取决于你的应用程序是如何分布的(如果这是一个网站,我个人会更担心)

在获取高程时,在大多数其他地方使用逗号作为分隔符是完全可能的:

elevation = 20,000
在所有其他答案中,文件中该行的输出将为:

39,41,41,20,20,000
当解析时(假设它将被解析,您正在创建一个机器可读的格式)将失败

您要做的是首先将内容解析为小数,然后输出该小数

假设您像这样清理输入:

decimal latitude = Decimal.Parse(textBoxLatitude.Text);
decimal longitude = Decimal.Parse(textBoxLongitude.Text);
decimal elevation = Decimal.Parse(textBoxElevation.Text);
然后,您将格式化这些值,以便不使用逗号(如果需要)


为此,我真的建议您使用专用的CSV编写器/解析器(试试,或者,如果您愿意的话),它可以在您想要用逗号分隔的内容中使用逗号。

而您可以使用
字符串。加入
,正如其他人提到的,他们忽略了三件重要的事情:

  • 事实上,你真正想做的是写一个文件
  • 您正在接收的输入,以及输入中是否包含逗号
  • 如果对输入进行清理,则在将其写入文件时,线程上的当前区域性是什么
您想写一个逗号分隔的文件。这方面没有标准格式,但您必须小心字符串内容,尤其是在您需要用户输入的情况下。考虑以下输入:

latitude = "39,41"
longitude = "41,20"
有一个,所以这种输入是非常可能的,这取决于你的应用程序是如何分布的(如果这是一个网站,我个人会更担心)

在获取高程时,在大多数其他地方使用逗号作为分隔符是完全可能的:

elevation = 20,000
在所有其他答案中,文件中该行的输出将为:

39,41,41,20,20,000
当解析时(假设它将被解析,您正在创建一个