导出* .txt文件将逗号转换为点

时间:2016-03-06 20:43:51

标签: c#

我正在使用此代码导出* .txt

TextWriter sw = new StreamWriter(@"C:\fiscal.txt");       

int rowcount = dataGridView1.Rows.Count;

for (int i = 0; i < rowcount - 1; i++)
{
    sw.Write("{0,-20}", dataGridView1.Rows[i].Cells[0].Value.ToString());       
}                

sw.Close();

我的文本文件包含一个带逗号示例3,20

的值编号

我该怎么改变它?并用点3.20

导出它

3 个答案:

答案 0 :(得分:2)

简单的解决方法是应用.NET / C#String.Replace(",", ".")方法,但仅限于在该特定文本中没有使用“,”的其他情况;因此,以下行将很快完成工作(最佳性能):

dataGridView1.Rows[i].Cells[0].Value.ToString().Replace(",", ".")

如果使用美元符号输入值,它也可以正常工作,例如:$ 3,20(将转换为$ 3.20)。

或者,您可以将Parse()(或TryParse())方法与CultureInfo类结合使用,这是一种通用解决方案,但对于此特定任务可能是“过度杀伤”,并且还需要更长的时间才能完成(即会导致显着的性能下降)。此外,如果使用主要货币符号(如上面提到的$ 3,20)输入值,解析可能会有点问题。

希望这可能会有所帮助。

答案 1 :(得分:0)

由于这是货币数据,您可以使用Decimal.TryParse将文本转换为小数,并将文化设置为带有十进制逗号的文化(法语说):

NumberStyles style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;

decimal result;
if (decimal.TryParse(text, style, new CultureInfo("fr-FR"), out result))
{

}

然后使用使用小数点的文化(英语说)写出来:

string outputText = result.ToString("C", new CultureInfo("en-GB"));

虽然这会产生改变货币符号的副作用。为了确保保持不变,您必须克隆用于输出的文化并更改其货币符号。

答案 2 :(得分:0)

ToStringParse中使用CultureInfo.InvariantCulture。所以在你的情况下它看起来像这样:

sw.Write("{0,-20}", dataGridView1.Rows[i].Cells[0].Value.ToString(CultureInfo.InvariantCulture));