讀取txt的問題

我想請問如果想讀取這個txt檔寫進mysql資料庫中 分別放於三個欄位(筆數,編號,標題)中

txt檔內容如下

1

RE42,327

Medicinal compositions improving brain function and method for improving

brain function

2

RE42,325

Homogeneous multiplex hybridization analysis by color and Tm

3

RE42,324

Compound for treatment of allergy and asthma

4

PP21,892

Dianthus plant named `FLORIAMETRINE`

5

7,937,337

System and method for generating robot genome

6

7,937,270

System and method for recognizing speech securely using a secure

multi-party computation protocol

.....

在抓取上我的想法是想要每次讀取三行存入不同buffer再寫入資料庫中

但是有幾筆資料的title從原始碼寫入txt檔的時候被分成兩行(如第1和第6筆資料),造成讀取寫入上有困難,請問有什麼比較好的方法可以重整txt檔內容嘛?(變成筆數一行,編號一行,標題一行這樣)或是有其他更好的作法呢?

Update:

您好,我照著你的code去跑了一次(data上方有加一行空白)

似乎不會進入for迴圈? echo測試count($itemArr)跑出來是1

有些資料的編號是由數字組成如7,937,337

我不知道這會不會影響判斷@@

1 Answer

Rating
  • CY
    Lv 5
    9 years ago
    Favorite Answer

    假設所有筆數資料都是數字且佔據一行 而且 所有編號資料都含有文字

    可以使用 preg_split 以正則表達式將所有筆數行找出 並依此切斷文件放入陣列 ($itemArr)

    (*請於txt檔最上方加入一行空白 以利抓到第一筆資料)

    $itemArr 中 雙數項是 編號與標題 奇數項是筆數

    接下來將雙數項再以preg_split 分開

    各資料一一存入相對應的陣列 即可應用

    code 如下

    $filename = "preg_split_data.txt";

    $handle = fopen($filename, "r");

    $contents = fread($handle, filesize($filename));

    $itemArr = preg_split("/\n([0-9]+)\n/", $contents, -1, PREG_SPLIT_DELIM_CAPTURE);

    $num = array();

    $id = array();

    $title = array();

    // $item[0] is empty

    // $item[1] is the id

    // $item[2] is the number & title

    for ($n = 1; $n<count($itemArr); $n++){

    if ($n%2 == 0) {

    $subArr = preg_split("/\n/", $itemArr[$n], 2);

    array_push($id, $subArr[0]);

    array_push($title, $subArr[1]);

    } else {

    array_push($num, $itemArr[$n]);

    }

    }

    foreach ($num as $key => $value){

    echo "$value<br>{$id[$key]}<br>{$title[$key]}<hr>";

    }

    2011-05-06 22:47:28 補充:

    >echo測試count($itemArr)跑出來是1

    請問 你是用 windows 主機嗎

    我的code 於unix 主機測過沒問題

    在過去 windows 的斷行符號 是 \n\r

    unix 裡 斷行符號 是 \n

    這就造成比對的問題

    可以試試

    $itemArr = preg_split("/\n\r([0-9]+)\n\r/", $contents, -1, PREG_SPLIT_DELIM_CAPTURE);

    >有些資料的編號是由數字組成如7,937,337

    這個編號ok 含有文字 (,). 只要資料的編號含有文字(不全是數字)就行

    • Login to reply the answers
Still have questions? Get your answers by asking now.