2013-09-23 2 views
0

온라인에서 찾은 일부 CSV 파일에서 제대로 작동하는 CSV 파서를 만들었지 만 Microsoft Excel 2011을 통해 XLS에서 CSV로 변환 한 CSV 파서는 작동하지 않습니다. 작업과 같은 포맷 것들은 :PHP의 CSV 구문 분석 조건

"정렬 순서", "일반 이름", "정식 이름", "유형", "하위 유형", "주권", "자본", "ISO 4217 통화 코드 ","ISO 4217 통화 이름 ","ITU-T 전화 코드 ","ISO 3166-1 2 문자 코드 ","ISO 3166-1 3 문자 코드 ","ISO 3166-1 번호 ","IANA 국가 코드 TLD " "1 ","아프가 니 스탄 ","아프가니스탄 이슬람 국가 ","독립 국가 ","카불 ","AFN ","아프가니스탄 ","+ 93 ","AF ","AFG ","004 ",". af "......................... 등 ...

' 작업은 다음과 같이 형식화됩니다.

주문 번호, 주문 날짜, 반환 된 날짜, 제품 ID, 설명, 주문 이유 코드, 반환 수량, 주문 반환 설명, 발송지 이름 1, 발송지 주소 2, 발송지 주소 3, 발송지 도시, 선박 시 /도, 우편 번호로 발송, 발송, 발송, 이메일 발송, ShipVia 5555555,2013-07-05 13 : 58 : 36.000,2013-08-16 00 : 00 : 00.000,5555-55,0555 - 일부 테스트 것, 환불, 2, jeric 비티, 123 가짜 일 ,,, 버크, NJ, 55055, 미국, 폐기, 테스트 @의 test.com, 슈퍼 빠른 배송

내보낼 엑셀 얻을 어쨌든 거기 첫 번째 형식으로? 파일이 거대하고 수동으로 편집해야 할 부분이 있기 때문에이 작업을 수동으로 수행하는 것을 피하고 싶습니다. "대체 할 수없는 부분"을 수동으로 편집해야합니다. 또 다른 쟁점은 어떤 곳에서는 두 배, 때로는 삼중 콤마가 있다는 것입니다. 이것은 두 파일 모두에 나타나지만. 여기

파서입니다 :

여기에 바퀴를 재발견하려고 할 수도 있지만 나는 긴 산책 설명을주고 싶지 않은 곳 개인적으로 질문을 요청했습니다 불구하고, 주석에서 언급 한 바와 같이
function ingest_csv() { 

    $file_url = 'http://www.path.to/csv/file.csv'; 
    $record_num = 0; 
    $records = array(); 
    $header = array(); 
    if (($handle = fopen($file_url, "r")) !== FALSE) { 
    $records['id'] = ''; 
    while (($data = fgetcsv($handle)) !== FALSE) { 
     $records['id'][$record_num] = ''; 
     $cell_num = 0; 
     foreach ($data as $cell) { 
     if($record_num == 0) { 
      $header = $data; 
     } else { 
      $current_key = $header[$cell_num]; 
      $records['id'][$record_num][$current_key] = $cell; 
     } 
     $cell_num++; 
     } 
     $record_num++; 

    } 

    fclose($handle); 
    } 
    else { 
    echo 'could not open file.'; 
    } 
    return array($record_num, $records); 
} 

function batch_csv() { 
    list($num_rows, $rows) = ingest_csv 
    print_r($num_rows); 
    print_r($rows); 
} 
+0

자신의 CSV 파서를 쓰기 왜? PHP에는 [fgetcsv()] (http://php.net/fgetcsv) 및 [fputcsv()] (http://php.net/fputcsv)가 있습니다. 맹 글링 된 입력을 수용하려고 시도하는 것보다 파서를 해킹하려고 시도하는 대신 올바른 csv를 생성하도록 XSL을 수정해야합니다. –

+0

'fgetcsv()'의 함수 인자를 살펴보면 각 형식의 인자를 조정하기 만하면됩니다. –

+0

@MarcB 당신이 제안한 것이 어떻게해야하는지 묻고있는 것처럼 질문을 이해하지 못한 것 같습니다. 내 PHP를 수정하려고하지 않고 내 XSL 만 사용했습니다. > "첫 번째 포맷으로 내보내기가 능숙합니까?" – CR47

답변

1

왜 내가 틀에 얽매이지 않는 접근법을 사용하도록 강요 당했는가?

예를 들어 OpenOffice Calculator에서 CSV로 저장하면 모든 필드를 큰 따옴표로 묶는 등 여러 가지 추가 옵션이 제공됩니다.

는 불행하게도 엑셀 당신에게 선택의 여지를주지 않지만, 마이크로 소프트는 매크로를 사용하여 해결 방법까지 제공합니까 - http://support.microsoft.com/kb/291296/en-us

+0

이해 해 주셔서 감사합니다. OpenOffice를 사용하여 필요한 것을 내보낼 것입니다. – CR47