• 締切済み

改行コードの除去

phpでcsvファイルを読み込んで処理しています。 $handle = fopen(ファイル名,"r"); while (!feof($handle)){ $filedata = fgets($handle); $record = explode(",", $filedata); というようにやっているのですが、 ファイルの最終行の改行コードを除去する方法が分からなくて困っています。 何か良い方法は無いでしょうか

  • PHP
  • 回答数3
  • ありがとう数2

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

trim()は、末尾の改行を削除してくれますよ。 行毎に分解する前に、trimすれば、『最後の行だけ改行を除去』してくれます。

okapi5243
質問者

お礼

ありがとうございました。 結局空の文字列の行は処理しないというやり方にしてしまいました。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

fgets()の代わりにfgetcsv()を使うと、そのあたりの事を うまくやってくれた気がします。 自分で","で分ける必要もなかったはず

参考URL:
http://manual.xwd.jp/function.fgetcsv.html
okapi5243
質問者

お礼

ありがとうございます。 fgetcsvはエラーが多いと聞いて敬遠してました。 試してみます。

  • koke29
  • ベストアンサー率58% (114/196)
回答No.1

trim()で除去するとか str_replace ()で改行文字を置換するとか あります 改行コード 除去 PHP で調べればいっぱい出てくるので 使い方などはご自身で調べてみて下さいねー

okapi5243
質問者

補足

ありがとうございます。 trim()とかは知っているのですが、読み込んだcsvの最後の行だけ改行を除去する方法が分からないのです。 この改行がついているせいで実際の行より一行多く処理されてしまい、エラーが出てしまって困っています。

関連するQ&A

  • csv読み込みについて

    基本的なことかも知れませんが、調べても分からなかったので質問です。 phpでcsvファイルを読み込むプログラムを書いているのですが、 $handle = fopen('***.csv', 'r'); while (!feof($handle)){ $data = fgets($handle); という方法で読み込んでいます。 このcsvファイルの一行目をとばして読み込みたい(二行目から読み込む) のですが、何か良い方法はないでしょうか?

    • ベストアンサー
    • PHP
  • 改行コードだけの行が現れるまでを1行として取得

    PHPでインプットファイルから、 改行コードだけの行が現れるまでを1行として取得しようと思っています。 下記例のように、 fgetsで行を取得しようとしたら、 改行が現れた時点までを1行としてしまうので、 少し違った1行の取得となってしまいました。 どうすればPHPで実現できるのか教えて欲しいです。 【例】 this is a pen. good-bye. ↓ this is a pen.good-bye. を1行分として取得したい。 # PHP 5.3.9 # CentOS 5.8 ---- $inputpath = '/home/test/test.txt'; $file = fopen($inputpath,"r") or die("open error $inputpath"); flock($file,LOCK_SH); while (!feof($file)){ $string = fgets($file,10000); print "$string"; print "\n"; } //relese the lock flock($file, LOCK_UN); //close the file fclose($file); ----

    • ベストアンサー
    • PHP
  • csvファイルに複数行あるデータの取り込め方は?

    環境はxp、apache2、php5、Postgresql8.2です。 1台のPCをサーバ&クライアントにしています。 ただ今PHPとPostgresqlの勉強をしています。 いつも質問に答えてくれてありがとうございます。 以下のようにしてcsvファイルを読み込む処理をしています。 --------------------------- //ファイルを開く $fd = fopen ("c:\Book5.csv", "r"); //データを読み込む while (!feof ($fd)) { //「,」区切りでデータを分割 $line = split(",",fgets($fd)); --------------------------- ここで問題となるのは、 一つのデータに複数行ある場合、取り込む事が出来ません。 (行の最後と判断されるため?) どのようにしたら 取り込めますか?

    • ベストアンサー
    • PHP
  • ファイルを読み込み一部を書き換え

    ファイルを読み込み一部を書き換えたいです。 a.phpを読み込み$newという配列渡し、abcという文字があったら $dataのbbbに書き換えたいのですうまくいきません。 $data = "bbb"; $handle = @fopen("a.php", "r+"); if ($handle) { while (!feof($handle)) { $buffer = fgets($handle, 4096); $new = ereg_replace("abc", $data, $new); fwrite($fp,$new); } } fclose($handle); 助言お願いします。

    • ベストアンサー
    • PHP
  • PHPで外部ファイルを読み込むときの行の最後の改行の消し方について

    PHPについての質問です。 初歩的な質問ですがどうかお付き合いいただけたらと思います。 PHPで外部ファイルを読み込む際、csvファイルなどを1行ずつ読み込んだ場合、行の最後の改行まで代入されます。 例えば ////test.php/////////////// <?php $filename = list.csv; $fp = @fopen($filename,"r"); $data = @file($filename); @fclose($fp); ?> //////////////////////////// ////list.csv//////////////// 1,2,3,4,5 6,7,8,9,10 //////////////////////////// とする場合 $data[0]には 1,2,3,4,5 プラス改行のデータ $data[1]には 6,7,8,9,10 プラス改行のデータ が代入されます。 この改行のデータを除くためにはどのようにすればよいですか? 初歩的な質問で申し訳ないのですが、よろしくお願いします。

    • 締切済み
    • PHP
  • 正規表現について

    人名を漢字、平仮名、アルファベットでカンマ区切りでcsvファイルに保存したものがあるとします。 それで例えば、平仮名で一番初めが「あ」の人だけを表示させたいプログラムを書きたいのですがなかなかうまくいきません。 正規表現の使い方もいまいちわかっていなく、とりあえず全て平仮名かどうか調べるプログラムを、 http://phpspot.net/php/pg%90%B3%8BK%95%5C%8C%BB%81F%82%B7%82%D7%82%C4%82%D0%82%E7%82%AA%82%C8%82%A9%82%C7%82%A4%82%A9%92%B2%82%D7%82%E9.html のサイトからコピーして作成してみたのですが、表示されませんでした。 以下が作成したものです。 <?php $handle = fopen("csv.csv", "r"); if ($handle) { while (!feof($handle)) { $buffer = fgets($handle, 4096); list($kanji,$hiragana,$alphabet) = explode(",", $buffer); if(mb_ereg("^[あ-ん]+$",$hiragana)){ $output .= "$kanji<BR>\n"; } } } fclose($handle); echo $output; ?> もし出来ましたら、先頭が「あ」だけを表示する正規表現の表し方なども教えていただけると助かります。 お願いします。

    • ベストアンサー
    • PHP
  • HTMLで開いたsrcの改行コードを調べる方法を教えてください

    cgiでHTMLを作成していますが、cgiを実行した時に HTMLで改行が2個入ってしまいます。 unix上のファイルをfgetsにて1行ずつ読み込んで そのまま出力しています。 改行コードを削除したいのですが、 表示しているHTMLのsrc内にある改行コードに何(どの改行コード)が入っているのか分からず、削除できません。 (fgetsで読み込んだ1行の最後に"\0"が入っていると思って、それを削除してみたのですが、駄目でした。このやりかたは間違えていますか?正しい方法を教えてください。) 宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • 所有権root、600のファイルを読み書きしたいのですが…。

    所有権がrootでバーミッションが600のファイル (例えば、パスワードファイルなど) をPHPを使ってwebから読んだり書いたりしたいのですが、 どのようにしたら出来ますでしょうか? 例えば、次のようなコードです。 <?php $fp = fopen("/etc/shadow", "r"); while (!feof($fp)){ $line = fgets($fp, 4096); } fclose($fp); ?>

    • ベストアンサー
    • PHP
  • ファイルの中の行数を確認して、減らす

    今phpで掲示板を作っている初心者ですが、 ファイルの中の行数を確認してから、 ある一定数をオーバーしたら古いものからけしていく作業を したいのですが、上手く行きません。 ファイルの行数を確認する方法は、 $count=0; $fd=fopen("$filename","r"); while(!feof($fd)){ $data = fgets($fd); $count++; } な感じで、whileしか無理ですかね? この方法だとデータが多くなると心配です。 何かもっと良い方法はないでしょうか? また上で行数を調べて、例えば行数が100件を越したら一行消し、 それを再度ファイルに書き込むにはどうしたらよいのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 改行を読み飛ばす

    以下のようなファイルを読み込みたいのですが…. -------------------------------------------------- あいうえを かきくけこ さしすせそ たちつてと -------------------------------------------------- のように1行文字列があって,1行空白行(改行のみ)があって…のような繰り返しのファイルなんですが,空白行を読み飛ばして続けて -------------------------------------------------- あいうえお かきくけこ さしすせそ たちつてと -------------------------------------------------- のように表示させる場合はどのように書いたらよいですか? -------------------------------------------------- while(fgets(str,256,fpin)){   if(strcmp(str,"\n")!=0){    printf("%s\n",str);   } } -------------------------------------------------- と書いたのですが,空白行も表示されてしまいます. 何か間違えているでしょうか? それとも実はファイルの空白行は改行じゃないとかでしょうか?