[英]Writing from a list to a text file C#
如何將整個列表編碼到文本文件中,並在數據的每一位之間使用逗號? 當前,它正在創建文件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;
}
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>
使其變得更通用,但是在我采用這種形式的代碼中,我不需要這樣做。
盡管您可以使用String.Join
就像其他人提到的那樣),但他們忽略了三件事:
您要編寫一個逗號分隔的文件。 尚無標准格式,但是您必須小心字符串內容,尤其是在您要獲取用戶輸入的情況下。 考慮以下輸入:
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編寫器/解析器(嘗試在NuGet上嘗試ServiceStack的序列化程序 ,或者根據需要嘗試使用其他方法 ),該方法在要用逗號分隔的內容中包含逗號。
You cannot output the list just by calling tw.WriteLine(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());
您必須迭代列表(未測試)或使用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.