2008-10-01 19 views
5

MySQLテーブルにlargish(24MB)のテキストファイルをインポートする必要があります。各行は次のようになります。空白で区切られたテキストファイルをMySQLにインポートするにはどうすればよいですか?

1 1 0.008 0 0 0 0 0          

があり、各フィールドの後に1つ以上のスペースであり、最後のフィールドは改行の前に約36スペースで尾行されています。

このようなファイルをMySQLにインポートするにはどうすればよいですか?ドキュメントから、LOAD DATAはすべてのフィールドが完全に同じ文字列で終了すると考えているようです。私は試しました

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ' '; 

しかし、MySQLは空のフィールドの区切りとして複数のスペースのシーケンスを解釈します。

アイデア?

答えて

9

UNIX/Linuxの場合は、sedを使用してください。

は、端末と種類を開きます。

sed 's/ \+/ /g' thefile > thefile.new 

これは、1つのスペースで複数のスペースのすべてのシーケンスを置き換えます。

0

Jaucoが投稿したのと同じコマンドを使用して、区切り文字を ';'に変更することもできます。または\ n。 これも役に立ちます。

+0

そうでもありません。 MySQLはスペースをフィールド区切り文字として使用することにかなり満足していますが、ここで問題となるのは複数のものだけです。 LFを使用すると、レコードの区切り文字と同じになるため、LFを使用すると悪化します。 –

0

これを実際に行う方法はありませんか?シンプルなPHPスクリプトは、内のファイルをロードすることができ、スペースで分割し、全く時間がないの挿入を行うだろう:

<?php 

$db = mysql_connect('host', 'user', 'password') 
or die('Failed to connect'); 
mysql_select_db('database', $db); 

$fileHandle= @fopen("import.file", "r"); 
if ($fileHandle) { 
    while (!feof($fileHandle)) { 
     $rawLine = fgets($fileHandle, 4096); 

     $columns = preg_split("/\s+/", $rawLine); 

     //Construct and run an INSERT statement here ... 

    } 
    fclose($fileHandle); 
} 

?> 

編集 言われて、Jakal's提案がはるかに滑らかな印象であること。)

2

Windowsの場合は、Excelを使用してください。

Excelは、空白で区切られたファイルをインポートします(「後続の区切り文字をインポートメニューから1つのボックスとして扱う」チェックボックスをオンにします)。

は、その後、あなたは単にExcelからCSVなどのファイルを保存し、使用してMySQLにインポートすることができます

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 
関連する問題