如何在每个数据位之间使用逗号将整个列表编码到文本文件中?目前它正在创建文件newData,但它没有从列表中放入变量。这是我到目前为止所拥有的。
public partial class Form1 : Form {
List<string> newData = new List<string>();
}
以上是我创建列表的地方。以下是我正在阅读的地方。
private void saveToolStripMenuItem_Click(object sender, EventArgs e) {
TextWriter tw = new StreamWriter("NewData.txt");
tw.WriteLine(newData);
buttonSave.Enabled = true;
textBoxLatitude.Enabled = false;
textBoxLongtitude.Enabled = false;
textBoxElevation.Enabled = false;
}
以下是变量的来源。
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;
}
答案 0 :(得分:4)
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
TextWriter tw = new StreamWriter("NewData.txt");
tw.WriteLine(String.Join(", ", newData));
// Add appropriate error detection
}
在回答两个主要答案线程中的讨论时,以下是我的旧代码中一个处理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);
}
使用IEnumerable<object>
可以稍微提高一点,但在我使用此表单的代码中,我没有必要。
答案 1 :(得分:4)
虽然你可以像其他人提到的那样使用String.Join
,但他们忽略了三件重要的事情:
您想要编写逗号分隔的文件。没有标准化的格式,但您必须小心字符串内容,尤其是在您的情况下,您将获得用户输入。请考虑以下输入:
latitude = "39,41"
longitude = "41,20"
有一个number of countries where the comma is used as a decimal separator,所以这种输入很可能,这取决于您的应用程序的分布情况(如果这是一个网站,我会更加担心)。
在获得高程时,在大多数其他使用逗号作为千位分隔符的地方绝对可能:
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编写器/解析器(如果您愿意,请尝试ServiceStack's serializer on NuGet或others),这会在您想要的内容中占用逗号以逗号分隔。
答案 2 :(得分:0)
You cannot output the list just by calling tw.WriteLine(newData);
但是这样的事情会实现:
tw.WriteLine(string.Join(", ", newData));
答案 3 :(得分:-1)
StringBuilder b = new StringBuilder();
foreach (string s in yourList)
{
b.Append(s);
b.Append(", ");
}
string dir = "c:\mypath";
File.WriteAllText(dir, b.ToString());
答案 4 :(得分:-1)
您必须迭代List(未测试)或使用string.Join,正如其他用户建议的那样(您需要将列表转换为数组)
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
TextWriter tw = new StreamWriter("NewData.txt");
for (int i = 0; i < newData.Count; i++)
{
tw.Write(newData[i]);
if(i < newData.Count-1)
{
tw.Write(",");
}
}
tw.close();
buttonSave.Enabled = true;
textBoxLatitude.Enabled = false;
textBoxLongtitude.Enabled = false;
textBoxElevation.Enabled = false;
}