使用带有日文字符双引号字段的流阅读器读取csv文件.它不读日文字符并将其视为unicode字符.我尝试了不同的编码类型,但它不适合我.请与我分享一些想法或解决此问题的其他解决方案.或者有更好的方法来做到这一点.
public DataTable ReadDataFromCSV(string path, char delim)
{
string fulltext;
string[] arrColumnNames;
string[] arrColumnValues;
string[] arrRows;
int i, j, n;
System.Data.DataTable dt = new System.Data.DataTable();
DataRow row;
if (delim.ToString().Length < 1)
{
delim = ',';
}
try
{
//' check that the file exists before opening it
if (File.Exists(path))
{
using (TextReader sr = new StreamReader(path,Encoding.UTF8))
{
fulltext = sr.ReadToEnd();
arrRows = fulltext.Split('\n');
arrColumnNames = arrRows[0].Replace('"', ' ').Trim().Split(delim);
//'add columns to a datatable
for (n = 0; n < arrColumnNames.Length …Run Code Online (Sandbox Code Playgroud) 我需要导入一个巨大的csv数据文件(6880列),我需要能够使用列标题来访问它.
什么是最好的方式?
速度并不重要.清晰度是.
我有一个格式如下的CSV文件:
name,color,tasty,qty
apple,red,true,3
orange,orange,false,4
pear,greenish-yellowish,true,1
Run Code Online (Sandbox Code Playgroud)
如您所见,Ruby OO世界中的每一列都代表了各种类型 - 字符串,字符串,布尔值,整数.
现在,最终,我想解析文件中的每一行,确定适当的类型,并通过Rails迁移将该行插入数据库.例如:
Fruit.create(:name => 'apple', :color => 'red', :tasty => true, :qty => 3)
Run Code Online (Sandbox Code Playgroud)
救命!
我正面临csv文件中的MalformedCSVError问题.下面给出了我被卡住的地方:
"#字面上有数百个"IP-to-Country"数据库来源."
因为该行包含双引号.此处停止执行异常是:FasterCSV :: MalformedCSVError
我怎么能处理这种情况.我也不能编辑csv文件..
请帮帮我.
我从SQL导出表和查询,其中一些字段是多行的.
Ruby(1.9+)读取CSV的方式似乎是:
require 'csv'
CSV.foreach("exported_mysql_table.csv", {:headers=>true}) do |row|
puts row
end
Run Code Online (Sandbox Code Playgroud)
如果我的数据是这样的,那么效果很好:
"id","name","email","potato"
1,"Bob","bob@bob.bob","omnomnom"
2,"Charlie","char@char.com","andcheese"
4,"Doug","diggyd@diglet.com","usemeltattack"
Run Code Online (Sandbox Code Playgroud)
(第一行是标题/属性)
但如果我有:
"id","name","address","email","potato"
1,"Bob","---
- 101 Cottage row
- Lovely Village
- \"\"
","bob@bob.bob","omnomnom"
2,"Charlie","---
- 102 Flame Street
- \"\"
- \"\"
","char@char.com","andcheese"
4,"Doug","---
- 103 Dark Cave
- Next to some geo dude
- So many bats
","diggyd@diglet.com","usemeltattack"
Run Code Online (Sandbox Code Playgroud)
然后我得到错误:
.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/csv.rb:1894:in `block (2 levels) in shift': Missing or stray quote in line 2 (CSV::MalformedCSVError)
Run Code Online (Sandbox Code Playgroud)
这似乎是因为该行的末尾没有近距离引用,因为它跨越了几行.
(我试过'FasterCSV',因为ruby 1.9,宝石变成了'csv')
我编写了从CSV加载数据到DB的方法.对我而言,它有点不合时宜,而且远离DRY:
def self.from_csv(data)
c = Company.new
FasterCSV.parse(data) do |row|
c.name = row[0]
c.street = row[1]
c.street_number = row[2]
c.apartament_number = row[3]
c.city = row[4]
c.post_code = row[5]
c.post_office_city = row[6]
c.nip = row[7]
c.regon = row[8]
c.vatin = row[9]
end
end
Run Code Online (Sandbox Code Playgroud)
如何使它更性感或可能已经有任何lib加载数据?