2017-03-10 6 views
0

私はsqlite3を初心者にしています。SQLite3:MacでCSVをインポートできません

私は現在、シェルでテーブルを作成することができないという問題に取り組んでいます。私は

.mode csv 
.import filename tab1 

を実行しようとしている。しかし、私は.csvファイルをインポートしていますので、私はこのエラー

CREATE TABLE tab1(...) failed: duplicate column name: B- 

を取得しています、私は多分、私は私の列名に重複を持っていると思いましたしかしそれらはすべて私にとっては明白なようです。誰かが私を正しい方向に向けることができますか?

SID,Name,Cohort,Email,Gender,Ethnicity,Major,Grades,More grades,Last grades,Not sure,, 
24239361,name1,Cohort 1-Fall 2013,[email protected],Female,Chinese,CS,B,C+,B-,B-,, 
24474707,name2,Cohort 1-Fall 2013,[email protected],Male,Chinese,CS,B,B+,B-,B-,, 
24266062,name3,Cohort 1-Fall 2013,[email protected],Male,White,CS,B-,B-,C,B ,, 

はUPDATE:: は今だけであることを私のcsvファイルを編集:私はここに

は私の.csvファイルの短い抜粋です:-)それを本当に感謝

SID,Name,Cohort 
24239361,Name1,Cohort 1-Fall 2013 
24474707,Name2,Cohort 1-Fall 2013 
24266062,Name3,Cohort 1-Fall 2013 
22181134,Name4,Cohort 1-Fall 2013 

そして、私はそれをインポートし、.schemaを行うとき、私はこれを取得:私はスキーだから

CREATE TABLE foo(
"SID" TEXT, 
"Name" TEXT, 
24239361" TEXT, 
"Name1" TEXT, 
24474707" TEXT,l 2013 
"Name2" TEXT, 
24266062" TEXT,l 2013 
"Name3" TEXT, 
22181134" TEXT,l 2013 
"Name4" TEXT, 
24527147" TEXT,l 2013 

は、これは本当に奇妙です「コホート」ヘッダー列にppingして、次の行をすべて列に読み取る

+0

私はあなたのラインの端が間違っていることを推測すると思います。どのようにして.csvファイルを作成しましたか?最新のSQLiteツールパッケージにアップデートしてみてください。 –

+0

元々は.csvファイルに保存したExcelファイルでした。それが問題の原因になりますか? – Tim

+0

.csvファイルに表示されない制御文字がある可能性があります。そして 'sqlite3'のどのバージョンを使用していますか? –

答えて

1

正確にを再現できませんが、サンプルデータを試してみると、エラー:

CREATE TABLE tab1(...) failed: duplicate column name: 

その理由は、最初の行の最後に2つのカンマ(新しいテーブルの列を表す)があるためです。 SQLiteは空の名前の2つの列を作成しようとし、2番目の列で失敗します。解決策は、ファイルのすべての行からこれらのカンマを削除するか、またはそれらのフィールドに有効な列名を付けることです。

私は問題を具体的に再現できませんでしたが、何らかの理由でSQLiteが最初の行を表示していないようで、次の行のいずれかに基づいて列を設定しようとしています上記の問題を引き起こす値B-のフィールド)。なぜそれが起こっているのかを追跡する必要があります。また、あなたは最初のテーブルを作成し、あなたがそれをインポートする前に、ファイルから列の見出し行を削除することができます。

CREATE TABLE tab1 (SID INTEGER, Name TEXT, ...); 
.mode csv 
.import filename tab1 
+0

ありがとう!私は最後に余分なコンマを削除しました。私は現在、2行目から列を作成しようとしている理由を理解しようとしています。 SQLite3は何らかの理由で私の行を列として解釈しているようです。フォーマットエラーですか? – Tim

+0

デバッグ時に何らかの理由で私の「コホート」列が無視されていることがわかりました。残りの行を列として読み込み続けています.... – Tim

1

sqlite3ツールは、指定されたCR + LF(ようにCSVファイル内の改行文字を期待しますin RFC 4180)。

あなたのファイルは、次のようになります。

 
00000000: 53 49 44 2c 4e 61 6d 65 2c 43 6f 68 6f 72 74 0d SID,Name,Cohort. 
00000010: 32 34 32 33 39 33 36 31 2c 41 6c 6c 69 73 6f 6e 24239361,Xxxxxxx 
00000020: 20 43 6f 72 69 6e 6e 65 20 59 65 65 2c 43 6f 68 Xxxxxxx Xxx,Coh 
00000030: 6f 72 74 20 31 2d 46 61 6c 6c 20 32 30 31 33 0d ort 1-Fall 2013. 
00000040: 32 34 34 37 34 37 30 37 2c 41 6e 74 68 6f 6e 79 24474707,Xxxxxxx 
... 

このファイルは通常のテキストファイルに対して有効になりマック行末(CRのみ)を、持っています。

は手動でCSVモードを設定した後、行の区切りを変更することができます。

.mode csv 
.sep , \r 
+0

私は現在Macを使用していますので、それはうまくいくはずですか?私が理解していないことはそれ以上あるのですか? – Tim

+0

UPS、CSVのインポートが異なる... –

関連する問題