我似乎无法使用以下连接字符串读取.csv文件:
var fileName = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "Uploads\\countrylist.csv");
string connectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=""text;HDR=YES;FMT=Delimited""", fileName);
OleDbConnection oledbConn = new OleDbConnection(connectionString);
oledbConn.Open();
Run Code Online (Sandbox Code Playgroud)
它给出以下错误:
'D:\ arrgh\arrgh\Uploads\countrylist.csv'不是有效路径.确保路径名拼写正确,并且您已连接到文件所在的服务器.
我确认文件在那里.这里发生了什么?
原谅我的愚蠢,但我只需要一些指导,我找不到另一个问题来回答这个问题.我有一个相当大的csv文件(约300k行),我需要确定给定的输入,csv中的任何行是否以该输入开头.我按字母顺序对csv进行了排序,但我不知道:
1)如何处理csv中的行 - 我应该将其作为列表/集合读取,还是使用OLEDB,嵌入式数据库或其他?
2)如何从按字母顺序排列的列表中有效地找到一些东西(使用它进行排序以加快速度的事实,而不是搜索整个列表)
我有一个从csv文件动态创建的数据集.我想要做的是将行插入我的MS Access表,但我无法弄清楚从哪里开始.
数据集中数据的标题可以根据顺序而变化,但标题的名称将始终与访问数据库匹配.我是否必须在insert命令中静态调用标题名称,还是可以从数据集中构建标题?
我知道如何创建连接并将其打开到数据库但不知道如何在insert命令中创建动态拉动表头.
在C#编程方面我很绿,所以如果你能为我拼出来,我真的很感激!
以下是访问表标头的示例:
ID,项目,成本,零售
然后是CSV,它将填充数据集表.它可能有零售或可能没有:
物品,成本
这是我到目前为止的代码,但它没有写入访问表.如果我发现dtAccess它正确显示.
OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"C:\\Database.accdb\";Persist Security Info=False;");
myConnection.Open();
string queryString = "SELECT * from " + lblTable.Text;
OleDbDataAdapter adapter = new OleDbDataAdapter(queryString, myConnection);
DataTable dtAccess = new DataTable();
DataTable dtCSV = new DataTable();
dtCSV = ds.Tables[0];
using (new OleDbCommandBuilder(adapter))
{
adapter.Fill(dtAccess);
dtAccess.Merge(dtCSV);
adapter.Update(dtAccess);
}
myConnection.Close();
Run Code Online (Sandbox Code Playgroud) 我有一个从另一个系统导出的CSV文件,其中列顺序和定义可能会更改.我发现FileHelpers非常适合读取csv文件,但是除非在编译应用程序之前知道列的顺序,否则它似乎无法使用它.我想知道它是否可以以非类型的方式使用FileHelpers.目前我正在使用它来读取文件但是我正在手工做的其他事情,所以我有一个类:
[DelimitedRecord(",")]
public class CSVRow
{
public string Content { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这意味着每一行都在Content其中,这很好,因为我已经分割了行等,但由于文件中固有的逗号,我现在遇到此方法的问题,因此一行可能是:
"something",,,,0,,1,,"something else","","",,,"something, else"
Run Code Online (Sandbox Code Playgroud)
我对这个字符串上的逗号的简单拆分不起作用,因为在"某些东西"中有一个逗号,它会被拆分.显然,FileHelpers之类的东西非常方便,解析这些值并考虑引号.那么有可能以这种方式使用FileHelpers,没有已知的列定义,或者至少能够传递csv字符串并获取值列表,或者是否有任何好的库来执行此操作?
我需要解析一个utf8编码的csv.在转换之后,我刚刚看到问题在于beging的BOM()字符.我无法使用utf8编码创建一个避免BOM的csv,因为我需要解析它,即使它是utf8编码的.
任何人请告诉我如何使用c#.net从csv中删除BOM()字符.
更新:我已经添加了我的代码来读取csv头文件,因为我在文件的开头获取了BOM.
string CSVConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + ConfigurationSettings.AppSettings["CSVFolder"].ToString() + ";Extensions=asc,csv,tab,txt;Persist Security Info=False;";
using (OdbcConnection Connection = new OdbcConnection(CSVConnectionString))
{
List<string> CSVHeaders = new List<string>();
string SelectQuery = string.Format(@"SELECT TOP 1 * FROM [{0}]", CSVFileName);
OdbcCommand Command = new OdbcCommand(SelectQuery, Connection);
Connection.Open();
OdbcDataReader Reader = Command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
int ColumnCount = Reader.FieldCount;
for (int column = 0; column < ColumnCount; column++)
{
CSVHeaders.Add(Reader.GetName(column));
}
return CSVHeaders;
}
Run Code Online (Sandbox Code Playgroud) 我有一个CSV字符串,我想把它分成一个数组.但是,CSV是字符串和数字的混合,其中字符串用引号括起来,可能包含逗号.
例如,我可能有如下CSV:
1,"Hello",2,"World",3,"Hello, World"
Run Code Online (Sandbox Code Playgroud)
我想它,所以字符串分为:
1
"Hello"
2
"World"
3
"Hello, World"
Run Code Online (Sandbox Code Playgroud)
如果我使用String.Split(',');我得到:
1
"Hello"
2
"World"
3
"Hello
World"
Run Code Online (Sandbox Code Playgroud)
有这么简单的方法吗?已编写的库或是否必须按字符解析字符串?
如何删除(逗号)在"(双引号逗号)和"(双引号逗号)之间.就像有"a","b","c","d,d","e","f",然后从这里,在"和"之间有一个逗号应该被删除,删除该逗号后它应该 "a","b","c","dd","e","f"在C#的正则表达式的帮助下?
编辑:我忘了指定引号之间可能有双逗号"a","b","c","d,d,d","e","f",因为正则表达式不起作用.并且引号之间可以有任意数量的逗号.
并且可以有像那样的字符串a,b,c,"d,d",e,f应该有结果a,b,c,dd,e,f,如果字符串像a,b,c,"d,d,d",e,f那样的结果应该是a,b,c,ddd,e,f.
处理一个带有CSV文件并在每个","上拆分的程序.我遇到的问题是有些数字中有千个分隔符.在CSV文件中,数字正确呈现.当作为文本文档查看时,它们显示如下:
狗,猫,100,100,鱼
在CSV文件中,有四个单元格,值为"Dog","Cat","100,000","Fish".当我将","拆分为一个字符串数组时,它包含5个元素,当我想要的是4.有人知道解决这个问题的方法吗?
谢谢