c# - 编写 .csv 文件 - 独立于文化

标签 c#

在德语中,小数点分隔符是 ,值分隔符是“;” .在英语/其他语言中,十进制分隔符是 .值分隔符是“,”。

我想创建一个独立于当前文化的 .csv 文件。我的意思是 .csv 文件总是应该有“。”有小数点分隔符,“,”有值分隔符。

下面给出了这个代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Globalization;

namespace CSV_FILE_FORMAT
{
    class Program
    {
        static void Main(string[] args)
        {
            string aFileName = "result.csv";
            FileStream aFileStream = new FileStream(aFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
            StreamWriter m_StreamWriter = new StreamWriter(aFileStream);
            double[] values = new double[] { 10.5, 20.3, 30.2 };
            for(int i = 0; i < values.Length;i++)
            {
                m_StreamWriter.Write(values[i].ToString(CultureInfo.InvariantCulture));
                m_StreamWriter.Write(",");
            }
        }
    }
}

此代码的问题是操作系统是否为德语。小数分隔符显示为“,”而不是“.”。

请让我知道代码缺少一些东西。

最佳答案

您可能可以从当前区域性中获取小数点分隔符和列表分隔符。

CultureInfo culture = new CultureInfo(currentCultureName);
string decimalSeparator = culture.NumberFormat.NumberDecimalSeparator;
string listSeparator = culture.TextInfo.ListSeparator;

并且,如果写入的值包含任何分隔符,则将该值括在双引号内。

string val = values[i].ToString(CultureInfo.InvariantCulture);
if(val.Contains(decimalSeparator) || val.Contains(listSeparator))
{
    val = string.Format("\"{0}\"", val);
}
m_StreamWriter.Write(val);
m_StreamWriter.Write(listSeparator);

当前的区域性名称可以是这样的:“en-US”代表美利坚合众国。

希望这对您有所帮助!

关于c# - 编写 .csv 文件 - 独立于文化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11260829/

相关文章:

c# - ASP.NET 项目中的 AIML Bot 无法找到 CONFIG 文件?

c# - 在 SQL 中使用 join 检索不同记录

c# - 字符串连接和复杂性?

c# - 使用 CheckBox 在 ASP.NET GridView 中选择行

c# - 我应该从函数返回数组还是集合?

c# - TabControl 底部的选项卡

c# - 如何清除 WPF 中的 WebBrowser 控件

可比较类型的 C# 泛型

C# SQL Geometry 错误 : Invalid operator for data type. 运算符等于等于,类型等于几何

c# - 用 unicode 字符填写 pdf 表单