2014-10-08 91 views
0

我有具有以下格式

在PHP中讀取位置文本文件中的內容?

00151422 N8X 3V6 2013-11-11 00:19:00.000 IN   [email protected]     E  200-2462 Howard Avenue  Windsor ON CAN N8X3V6 M Dr. Patrick Soong 

00331448 T6E 2R1 2010-03-01 00:00:00.000 IN   [email protected]     E  9743 88 Ave NW  Edmonton AB CAN T6E2R1  Alina Tirlea Engstrom 

00364578 K7N 1A3 2011-01-12 00:00:00.000 IN        E  4463 Bath Rd  Amherstview ON CAN K7N1A3 M Mr. Martin Kandler 



上面位置文本文件包含3個記錄和在每個記錄中的字段20的文本文件。此外,我現在每列的大小。我將如何使用PHP在記錄中讀取記錄和字段?

字段的大小是

F1 = 8; F 2 = 10; F3 = 10; F4 = 10; F5 = 255; F6 = 50; F7 = 255; F8 = 10; F9 = 10; F10 = 50; F11 = 50; F12 = 1; F13 = 20; F14 = 50; F15 = 50; F16 = 60; F17 = 10; F18 = 20; F19 = 20; F20 = 1;

+1

爲什麼不只是'爆炸'它和迭代? – Sal00m 2014-10-08 09:19:32

+0

我們在文件中沒有分隔符。 – 2014-10-08 09:22:09

+0

這些字段不受制表符限制?它不是,你應該要求你的提供商發送一個CSV文件,用逗號或製表符分隔......或其他東西,否則你需要使用'substr'解析它。 – Sal00m 2014-10-08 09:23:09

回答

-1

謝謝sal00m,終於得到了答案 - 爆炸使用選項卡。

+0

啊,所以列是製表符分隔以及固定寬度?請用該信息更新問題,並接受您的答案。 – 2014-10-08 11:57:58

2

在某種循環中使用substr()。未經測試,但應該給你一個想法:

$lengths = [8,10,10]; // define all the lengths 

function fixed_width_data_to_array($data, $lengths) { 

    foreach($rows as $row) { 

     $position = 0; // start at the beginning of the row 

     foreach($lengths as $length) { 

      // add current field to array 
      $my_data[] = trim(substr($row, $position, $length)); 

      // move the 'pointer' to the start of the next field 
      $position += $length; 
     } 

     // add current row to an array 
     $my_array[] = $my_data; 

    } 

    return $my_array; 

}