人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

(PHP)CSVファイルの1列目の半角スペースについて

例として下記のようなCSVファイルがあったとします

------------ sample.csv ------------
氏名 | 住所 | 郵便番号
────────────
山田 | 太郎 | 1120000
────────────
------------ sample.csv ------------

上記CSVファイル中の"山田"の部分に半角スペースのみが入れた場合に
値をfgetcsv関数を用いて取り出すとNULLになってしまいます
("太郎"の部分に半角スペースがある場合は大丈夫)

この半角スペースをなくさずに半角スペースとしてCSVファイルから取得することは可能でしょうか
解決につながる回答を一番最初にしてくれた方に200P差し上げます
よろしくお願いします

●質問者: jayz
●カテゴリ:インターネット ウェブ制作
✍キーワード:CSV PHP ファイル 大丈夫 山田
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●200ポイント

値をfgetcsv関数を用いて取り出すとNULLになってしまいます

WindowsXP + PHP(5.2.5) では現象が確認できませんでした。

ただ、考えられる原因としては2つあります。


これらを解決する方法として、内部処理の文字コードを明示してやることと、fgets, rtrim, split で fgetcsv もどきを用意してみました。お試しください。

<?php
mb_internal_encoding('SJIS');
mb_regex_encoding('SJIS');

$infp = fopen('sample.txt', 'r');
while (! feof($infp)) {
 $s = fgets($infp);
 if ($s == FALSE || $s == '') break;
 $s = rtrim($s);
 $arr = split("\|", $s);
 foreach ($arr as $val) echo $val . '|';
 echo "<br />\n";
}
fclose($infp);
?>
◎質問者からの返答

回答ありがとうございます。

提示していただいたコードを使用したところ半角スペースがきちんと取得できることを確認できました

>fgetcsvはtrim関数のような方法で行頭・行末の空白文字を取り除いていることが影響しているのではないか。

どうやら上記が原因だったようです

fgetcsvが行頭・行末の空白を取り除いていたんですね

ありがとうございます


2 ● Mook
●10ポイント

太郎の部分でも駄目だと思うのですが、このあたりは仕様のようです。


次善の方法として fgets で読み、split で分割すれば、スペースを含めてデータとして認識できます。

もしくは、データ側で対応できるのであればダブルコーテーションを使用し、 " "とすれば読めます。

C:\test.csv 例

氏名,住所,郵便番号
山田,太郎,1120000
 ,太郎,1120000
" ",太郎,1120000
山田, ,1120000
山田,太郎,
山田 ,太郎 ,1120000

ただしこの場合" "の部分は当然ながら、fgets ではこのままデータとなってしまいます。


以下簡単なサンプルです。

<?
 echo "fgetcsv<br>";

 $fp = fopen( "C:\\test.csv", "r");
 $row = 1;
 while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
 $row++;
 $num = count($data);
 for ($c=0; $c < $num; $c++) {
 echo "[".$data[$c]."]\n";
 }
 echo "<br />\n";
 }
 fclose($fp);

 echo "fget<br>";
 $fp = fopen( "C:\\test.csv", "r");
 $row = 1;
 while( !feof($fp) ) {
 $data = split( ",", fgets($fp) );
 $row++;
 $num = count($data);
 if ( $num <= 1 ) break;
 for ($c=0; $c < $num; $c++) {
 echo "[".$data[$c]."]\n";
 }
 echo "<br />\n";
 }
 fclose($fp);
?>

http://php.benscom.com/manual/ja/function.split.php

http://phpspot.net/php/man/php/function.fgetcsv.html

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ