2010-07-18 5 views
2

.csv 파일의 전체 이름을 이름, 중간 이름 및 성으로 나누기 위해 아래 코드를 작성했습니다. 그것은 잘 작동하고 출력 할 경우 다음과 같은 종류를 제공합니다PHP에서 이름을 파헤 치고 .CSV 파일에 다시 쓰기에 대한 도움말

Eric,T.,Nolan 
Mary,,Worth 
Jim,T.,Lane 
E.,Thomas,Powell 
William,Reilly,Smith 
Johnny,,Depp 
Stevie,de,la Soul 

나는 그것이 화면에 인쇄 할 얻을 수 있지만, 쉼표 (즉, 이름으로 구분 된 세 개의 필드로 새 .csv 파일에 다시 넣어 도움이 필요 , middlename, 성). fwrite 나 fputcsv를 사용해야하는지 잘 모르겠습니다. 이름을 나누기 위해 오랜 시간이 걸렸습니다. 이제 새로운 CSV 파일로 다시 쓰려고합니다. 나는 전문가의 도움을 주시면 감사하겠습니다. 모두에게 감사드립니다! 마지막 하나는 제대로 보이지 않습니다

<?php 

$file = fopen('nameFile.csv', 'r'); 
$row = 0; 
while (($line = fgetcsv($file)) !== FALSE) 
{ 
list($name[]) = $line; 
$row++; 
} 
$number_of_rows = $row; 
fclose($file); 

for($i = 0; $i < $number_of_rows; $i++) { 
foreach ($name as $NameSplit) 
    list($first[], $middle[], $last[]) = explode(' ', $NameSplit, 3); 
    if (!$last[$i]) { 
    $last[$i] = $middle[$i]; 
    unset($middle[$i]); 
    } 
echo $first[$i] . "," . $middle[$i] . "," . $last[$i] . "<br>\n"; 
    } 

?> 
+0

실제로 입력이 CSV 파일입니까? –

+0

아니, 나는 그것이라고 생각했다. 아래의 설명을 참조하십시오. 조지 고마워. – Thomas

답변

1

숟가락을 먹을 위험이 있으므로 다시 시도하기로했습니다. 귀하의 코드는 새로운 프로그래머의 특징을 보여줍니다 (불쾌감 없음).

내 코드를 본인 것과 비교하십시오. list을 불필요하게 반복하면서 불필요한 카운터를 증가시키면서 잘못 사용했습니다. 약간 문제점을 지명하기 위하여.

입력 파일이 실제 CSV 파일이 아니라 단순히 한 줄에 하나의 이름이있는 파일이라는 가정에주의하십시오. 이 결론을 내릴 때 코드를 잘못 해석했을 수도 있습니다.

$file = fopen('nameFile.csv', 'r'); 

while (($line = fgets($file)) !== FALSE) 
{ 
    $names_array[] = trim($line); // trim whitespace at the begining and end of each line, in this case the EOL character(s) 
} 

fclose($file); 

$output_file = fopen('/var/tmp/output.csv', 'w'); // this will clobber the file output.csv use 'a' instead of 'w' if you want to add to an existing file 

foreach ($names_array as $name) 
{ 
    $processed_name = explode(' ', $name, 3); // split the name, based on spaces 

    // not all full names contain a middle name  
    if (!isset($processed_name[2])) 
    { 
     $processed_name[2] = $processed_name[1]; 
     $processed_name[1] = null; 
    } 

    // output each line into a CSV file 
    fputcsv($output_file, $processed_name); 
} 

fclose($output_file); 
+0

네, 전 멍청한 놈입니다. 그러나 나는 그것을 취미 (취미)로 조금은 실제로 즐긴다. 이것은 잘 작동합니다. 예, 입력 파일은 한 줄에 하나의 이름입니다. 단지 후속 조치였습니다 - CSV 입력 파일이 있다면 제대로 된 것입니까? 와, 말 : 이름, 주소, 나이. 이전 대답에서 나는 변수에 다음을 넣는 방법을 알아 내지 못했고 fputcsv를 사용하여 csv에 넣었다 : $ first [$ i]. ",". $ 중간 [$ i]. ",". $ last [$ i]. "
\ n"; 그러나 코드는 훌륭하게 작동합니다! 다시 한 번 감사드립니다. George – Thomas

+0

@ 토마스 그래, 너는 옳은 길을 걷고 있었고, 그 상황을 처리하기 위해 확장 될 수있다. 당신은'$ names_array'는 배열의 묶음을 포함 할 것이라는 점을 기억할 필요가 있습니다. 나의 이전의 대답은 어둠 속에서 빠른 찔림이었고 문제가있었습니다. '$ out' 배열은 CSV 파일의 값을 정확하게 인용하지 않지만 엔트리 당 한 줄을 포함합니다. 한 번에 한 줄씩 파일에 쓸 수 있습니다. '$ first $ middle $ last'의 기본적인 문제는 배열을 잘못 사용하고 있다는 것입니다. 재미있게 보내십시오. –

0

그건 :

여기 내 코드입니다. "Stevie de la Soul", 성은 "de la Soul"이어야하며 중간 이름은 비어 있어야합니다. 또한 사람들에게는 성이없는 많은 문화가 있습니다.

어떤 경우에도 CSV를 파일로 다시 작성하려면 fputcsv() 기능 만 사용하십시오. 매뉴얼 페이지에 "See alse"로 표시되어 있습니다 (fgetcsv()).

+0

좋은 지적 bluesmoon. 출력을 수동으로 조정해야 할지도 모르지만 함께 살 수는 있습니다. – Thomas