【问题标题】:How do I change my delimiter from comma to a semicolon? [duplicate]如何将分隔符从逗号更改为分号? [复制]
【发布时间】:2017-03-29 09:35:22
【问题描述】:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;
using System.Reflection;
using CsvHelper.Configuration;

namespace ReadCsvFile
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public DataTable ReadCsv(string filename)
        {
            DataTable dt = new DataTable("Data");
            using (OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" +
                Path.GetDirectoryName(filename) + "\";Extended Properties='text;HDR=yes;FMT=Delimited(;)';"))
            {
                using (OleDbCommand cmd = new OleDbCommand(string.Format("select *from [{0}]", new FileInfo(filename).Name), cn))
                {
                    cn.Open();
                    using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd))
                    {
                        adapter.Fill(dt);
                    }
                }
            }

            return dt;
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            try
            {
                using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "CSV| *.csv", ValidateNames = true, Multiselect = true })
                {
                    if (ofd.ShowDialog() == DialogResult.OK)
                        dataGridView.DataSource = ReadCsv(ofd.FileName);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

事实证明,我尝试读取的 csv 文件使用分号 (;) 作为分隔符,而不是通常的逗号 (,)。

我尝试更改分隔符,但由于某种原因无法更改。

如果能得到任何帮助,我将不胜感激!

【问题讨论】:

    标签: c# csv


    【解决方案1】:

    我会猜你只需要改变这个:

    using (OleDbConnection cn = new 
              OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" +
                   Path.GetDirectoryName(filename) + 
                   "\";Extended Properties='text;HDR=yes;FMT=Delimited(;)';"))
    

    到这里:

    using (OleDbConnection cn = new 
              OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" +
                   Path.GetDirectoryName(filename) + 
                   "\";Extended Properties='text;HDR=yes;FMT=Delimited(,)',"))
    

    将OleDb连接字符串中的FMT=Delimited(;)';改为FMT=Delimited(,)',

    更新:抱歉,我误解了你原来的问题 - 你已经在你的 OleDbConnection 中将分隔符更改为 ; - 错过了那个。 p>

    老实说:我不知道你应该如何以及应该做什么(除了你已经做过的)来让这个OleDbConnection 和命令正常工作......

    就个人而言,我会使用出色的(而且免费!)CsvHelper 组件来读取我可能需要导入的任何 CSV 文件 - 而不是 OleDb 的东西..... 使用CsvHelper,定义分隔符非常容易(以及您导入的更多属性),它就像一个魅力,从任何.csv 文件返回一个List<YourEntity>,准备好以任何你想要的方式使用

    【讨论】:

    • 我已经把它从 (,) 改成了 (;)。
    • 因为我需要分隔符为 (;)。因为 .csv 文件现在显然使用 (;) 作为分隔符而不是 (,)
    • @Red-X:好的——所以你已经改变了它——但它不起作用?你有什么错误吗?如果是这样:请在此处发布。
    • @marc-s 我没有收到错误。它读取文件,但将其全部显示在一列中,因为它没有读取分号 (;) 作为分隔符。
    • @Red-X:我个人会使用 CsvHelper 来读取 CSV 文件 - 不是 OleDb 的东西.....使用 CsvHelper,定义分隔符非常容易(以及您的更多属性进口) ....
    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2019-03-29
    相关资源
    最近更新 更多