2

.csvファイルのフルネームをファーストネーム、ミドルネーム、ラストネームに分割するために、以下のコードを記述しました。これはうまく機能し、次の種類の出力を提供します。

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

画面に印刷することはできますが、コンマで区切られた3つのフィールド(つまり、名、ミドルネーム、姓)を含む新しい.csvファイルに戻すのに助けが必要です。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";  
  }

?>
4

2 に答える 2

1

スプーンで餌をやる危険を冒して、すべてやり直すことにしました。あなたのコードは、新しいプログラマーの特徴を示しています(不快感はありません)。

私のコードをあなたのコードと比較してください。誤って使用しlist、不必要にループし、不要なカウンターをインクリメントしていました。いくつかの問題を挙げます。

これは、入力ファイルが実際のCSVファイルではなく、1行に1つの名前を持つファイルであるという前提に基づいていることに注意してください。この結論を引き出す際に、あなたのコードを誤って解釈した可能性があります。

$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);
于 2010-07-18T02:46:20.687 に答える
0

その最後のものは正しく見えません。「SteviedelaSoul」、名前は「de la Soul」、ミドルネームは空にする必要があります。また、人々が姓を持たない文化もたくさんあります。

いずれにせよ、CSVをファイルに書き戻すには、fputcsv()関数を使用するだけです。fgetcsv()のマニュアルページに「Seealse」としてリストされています。

于 2010-07-18T02:41:43.667 に答える