1

csv 以外のデータ ファイルを MySQL にインポートしようとしています。

1) データ フィールドは改行で区切られ、フィールド識別子は各行の先頭にあります。

2) 一部のフィールドには複数のエントリがあります

3) すべてのレコードにすべてのフィールドが入力されているわけではありません

4) フィールド内にいくつかの空白行が存在し、除外する必要があります

5) レコードは通常空白行で区切られますが、「Number X」でも区切られます

以下は、表示される 3 つのレコードの例を示すファイルの例です。

Number  1
ARTIST  BOOM JEFF=SINGER
    BACKING MUSICIANS=BAND
COMP  BOOM JEFF
DATE  1980
TIME  3.23
FIELD3  FRONT ROW
NOTE  LIVE RECORDING


Number  2
ARTIST  JOHN LEE=VOCAL
COMP  JOHN LEE
TIME  4.20
ID  000000230682
PUBLISHER  BLAHBLAH
FIELD3  DAY I RODE THE TRAIN

Number  3
ARTIST  BURT DAN=NARRATOR
     JOHNS RY=DRUMS
     STUDIO BAND=ORCHESTRA
     FREE DAN=DIRECTOR
COMP  JOHNS RY
DATE  1934
DUR  2.32
ID  000055332
PUBLISHER  WEEWAH
SHELF  86000002
FIELD3  EVE OF THE WAR
NOTE  FROM HE NARRATION "NO MORE THAT IN

       THE FIRST YEARS OF THE SEVENTEENTH CENTURY .."

このデータを MySQL にインポートする最良の方法は何ですか?

LOAD DATA INFILE を使用して読み込むことはできますか? または、フィールド識別子を取り除き、LOAD DATA INFILE を使用して読み込むことができる csv 形式に変換するスクリプトを作成する必要がありますか?

4

2 に答える 2

0

私が見たところ、あなたの最善の策は、次のようなスクリプト(phpを使用)でデータを1行ずつ解析するスクリプトです。

$lines=explode("\n",file_get_contents('file.name'));

$record=null;
//go through all the lines
foreach($lines as $line) {
  //if the line is not empty, add the field to the record
  if(trim($line)) {
    //I am only processing the field name-you'll have to do the same for equal signs
    $pos = strpos($line, ' ');
    $fieldName=substr($line,0,$pos;
    $fieldValue=substr($line,$pos+1);
    $record[$fieldName]=$fieldValue;
  }
  //if it is a blank line and we have a record, save it
  else if ($record) {
    //insert the record into the database
    insertRecord($record);
    //empty the record as the next line is a new record
    $record=null;
  }
}

function insertRecord($record) {
//to do implement an sql insert statement
}
于 2013-06-11T14:33:36.577 に答える