2014-10-08 2 views
0

I 텍스트 파일은 다음과 같은 형식을 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, F2 = 10; F3 = 10; F4 = 10; F5 = 255; F6 = 50; F7 = 255; F8 = 10; F9 = 10; F10 = 50, f1 = 50, f12 = 1, f13 = 20, f14 = 50, f15 = 50, f16 = 60, f17 = 10, f18 = 20, f19 = 20, f20 =

+1

왜 '폭발'하지 않고 반복할까요? – Sal00m

+0

파일에 구분 기호가 없습니다. –

+0

필드는 탭에 의해 제한되지 않습니까? 그렇지 않다면 공급자에게 CSV 파일을 쉼표 나 탭 등으로 보내달라고 요청해야합니다. 그렇지 않으면'substr '을 사용하여 파싱해야합니다. – Sal00m

답변

-1

감사합니다. sal00m, 마지막으로 답을 얻었습니다 - 탭을 사용하여 분해하십시오.

+0

아, 그래서 열은 고정 너비뿐만 아니라 탭으로 구분 되었습니까? 해당 정보로 질문을 업데이트하고 답변을 수락하십시오. –

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; 

}