5

大きな (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 は複数のスペースのシーケンスを空のフィールドを区切るものとして解釈します。

何か案は?

4

4 に答える 4

9

unix/linux を使用している場合は、sed を介して配置できます。

ターミナルを開き、次のように入力します。

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

これにより、複数のスペースのすべてのシーケンスが 1 つのスペースに置き換えられます。

于 2008-10-01T07:19:51.923 に答える
2

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

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

次に、ファイルを Excel から CSV として保存し、次を使用して MySQL にインポートするだけです。

LOAD DATA INFILE 'filename' INTO TABLE mytable FIELDS TERMINATED BY ','; 
于 2011-03-28T17:44:36.000 に答える
0

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

于 2008-10-01T07:26:42.097 に答える
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);
}

?>

編集 そうは言っても、ジャカルの提案ははるかにきれいです;)

于 2008-10-01T07:31:18.950 に答える