ファイルの読み込み時について

このQ&Aのポイント
  • ファイルの読み込み時に指定した文字列を検索し、別のファイルに書き込む処理を作成しています。
  • しかし、実行すると$countが1703行までしか表示されず、元データの10000行に達しません。
  • この問題の解決策を教えてください。
回答を見る
  • ベストアンサー

ファイルの読み込み時について

こんにちは。質問させてください。 あるファイルを読み込みその読み込んだ行に指定した文字列がふくまれていたら 別ファイルに書き込む処理を作成しています。 ------------------------------------- $count=0; $fd = fopen($file, "r"); //$file ベースとなるファイル if($fd){ while(!feof($fd)){ echo($count."\n"); <省略> if(指定した文字列発見){ 別ファイルに書き込む }   <省略> $count = $count + 1; } fclose($fd); } ------------------------------------- 念のため参照元ファイルの行を表示($countにて)させています。 ここで質問なんですが、 上記プログラムを実行すると$countが1703行までしか表示されません。 元データは10000行あります。 上記で10000行まで$countを表示できるはずなのですが・・・ 助けてください・・・ よろしくお願いいたします。

  • 653
  • お礼率36% (138/382)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • nitscape
  • ベストアンサー率30% (275/909)
回答No.1

挙げられているコード自体は問題ないと思います。echoの次の行の<省略>の内容にミスがあるのだと思います。

653
質問者

お礼

><省略>の内容にミスがあるのだと思います。 でした・・・。 ありがとうございました!!

関連するQ&A

  • ファイルの読み込みと置き換え

    Perlでテキストファイルを読み込み、テキストの一部を置き換えをするというプログラムを作っています。 用意されているテキストファイルは複数行あるもので、リスト作成ツールのフリーソフトにより作成されています。 目的はファイルを読み込み、一行一行中を見て特定の文字を置き換えて、最後に配列に一行一行いれていくというものです。 逆に配列に一度いれて一個一個置き換えてもOKで、結果が同じならばOKです。 以下にそのプログラムを書きます。 ############################## open(IN,"list.txt") || die "ファイルが見つからないので終了します。"; @file = <IN>; $count=@file; while(<IN>){ $_=~s/xls/エクセルファイル/; print "置き換え中!残りあと$count行です\n"; $count-- } close(IN); print"@file[18]","\n"; ############################## 最後の行で置き換えが成功したか見てますが、これを実行しても何も表示されません。 もちろん行数は18行どころか100行くらいあります。 たぶん配列の入れるタイミングとか何かが間違っていると思うのですが、どこで間違っているのかがよくわかりません。 教えていただけると助かります。

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

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

    • ベストアンサー
    • PHP
  • 【PHP】ファイル読み込みで「見えない文字」が発生する??

    PHP初心者です。 不思議な現象を経験したため質問させていただきます。 ファイルから文字列を読むとき、どうしても先頭に「見えない」文字がついてしまいます。見えない文字とは空白ではなく容積ゼロの文字のことで一種の文字化けと思われます。 <PHPプログラム> <?php header('Content-Type: text/html; charset=UTF-8'); header('Content-Language: ja'); mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); print "ここに発生→"; if($fp = @fopen("file.txt", "r")){ while( !feof($fp) ){ $line = trim(fgets($fp)); print "$line"; } @fclose($fp); } ?> <データファイルfile.txt の中身> ←ここ!1行目 2行目 3行目 <出力結果> ここに発生→←ここ!1行目2行目3行目 出力結果にカーソルを持って行き、矢印キーで動かしていただければ → と ← の間でカーソルが1回動かず、何かが「存在」していることが確認できると思います。 このような文字は初めての経験でわけがわかりません。予防策がありましたらお願いいたします。 <環境> レンタルサーバーはPHP4.4.4(UTF-8) ローカルはWin-XP(3台で確認) プログラムもデータファイルもUTF-8で書いています。 <ほか> その文字自体をここに載せようとしましたが「」に変換されてしまいました。これは一体何でしょう??

    • ベストアンサー
    • PHP
  • C言語を使って、ファイルの読み込みをして切り出して2次元配列に格納した

    C言語を使って、ファイルの読み込みをして切り出して2次元配列に格納したいのです。 1,2行目に配列の行の数と列の数が書かれ、3行目から改行とカンマ、スペースで区切られて配列が書かれているテキストを読み込んで2次元配列に格納する。 テキストの例) 4 3 1.1 1.2 1.3 1.4 1.5 2.1 2.2 2.3 2.4 2.5 3.1 3.2 3.3 4.4 3.5 というプログラムを書いています。色々と参考書やサイトを参考してとりあえずの形にはなったと思ったのですが、実行してもエラーが出ます。 どこまで動いているか調べたところ、一行ごとに読み出してそれを切り出して行くところでおかしな事をしてしまっているようですが、どう変えたらいいものか分かりません。 なので、その点のアドバイスと 大きさの分からないファイルから1,2行目を読み出すのはこれで変な動きをする恐れはないか の2点についてヒントでも構わないので、教えてください。 以下、書いたソースです(申し訳ないのですが、文字数の関係で一部省略しています。) #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[] ) { double ** mainhairetu; int size_x, size_y; /* size_x 行 size_y 列 */ int i,j,count=0,count2; int *cut,*temp2; double temp; char s2[] = " ,"; char gyou[10],*num; FILE *fil; while((fgets(gyou,10,fil)) !=NULL){ if(count == 0){ size_x=atoi(gyou); count++; }else if(count ==1){ size_y=atoi(gyou); count=count+1; }else{ break; } } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ここでmallocを使ってcutとmainhairetuの2つの配列を作っています。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ count=0; for (i = 0; i < size_y+2; i++) { mainhairetu[i][0] = atof( strtok( fgets(cut,50,fil),s2 ) ); for (j = 1; j < size_x; j++){ if(count <=1){ count++; break; }else{ mainhairetu[i][j] = atof( strtok( NULL,s2 ) ); } } } for(i=0;i<size_y;i++){ for(j=0;j<size_y;j++){ printf("%f",mainhairetu[i][j]); } printf("\n"); } return(0); }

  • ファイル入出力について

    次のようなプログラムを作りました。 コマンドラインから二つのファイルの名前を読み取り、最初の引数のファイルを2番目の引数のファイルにコピーするプログラムです。 質問は下のプログラムのコメント /*この行が質問です*/ の所です。 //ファイルをコピーする の部分の始めに while(!feof(from)) という条件を書いているため、/*この行が質問です*/ の行は不要であると思いましたが、実際にこの一行をのぞいてコンパイルして実行したところ、日本語が文字化けしてコピーされてしまいました。その後、この行を追加してコンパイルして実行すると文字化けもなく実行できました。 なぜこの行が必要なのでしょうか。 よろしくお願いします。 //ファイルコピー #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) {   FILE *from, *to;   char ch;   //引数の数の確認   if (argc != 3) {     printf("引数の数が違います");     exit(1);   }   //コピー元ファイルを開く   if ((from = fopen(argv[1],"r")) == NULL ) {     printf("コピー元ファイルオープンエラー");     exit(1);   }   //コピー先ファイルを開く   if ((to = fopen(argv[2],"w") )== NULL ) {     printf("コピー先ファイルオープンエラー");     exit(1);   }   //ファイルをコピーする   while (!feof(from)) {     ch = fgetc(from);     if(ferror(from)) {       printf("コピー元ファイル読み込みエラー");       exit(1);     }     if (!feof(from))       /*この行が質問です*/       fputc(ch,to);     if (ferror(to)) {       printf("コピー先ファイル書き込みエラー");       exit(1);     }   }   if (fclose(from) == EOF) {     printf("コピー元ファイルクローズエラー");     exit(1);   }   if (fclose(to) == EOF) {     printf("コピー先ファイルクローズエラー");     exit(1);   }   return 0; }

  • C言語のファイル処理 C言語

    指定したファイルのなかの文字列を表示させたいです。 最後の2行だけ表示させたいのですが、どうやっていいのかわかりません。。。また、それ2行を、入力した出力ファイルに書き込みたいのですが・・、どうやって指定したらいいのでしょうか?? わかる方よろしくです(><)

  • バッチファイルについての質問です

    バッチファイルの質問です。宜しくお願いします。 バッチファイルでテキストファイルの中から指定した文字列が入っている行をとり、指定した文字列を除いた文字列が欲しいのですが、どのようなコマンドを使用すればできるでしょうか? ----------------------- AAAランダム文字列1 BBBランダム文字列2 CCCランダム文字列3 DDDランダム文字列4 EEEランダム文字列5 ----------------------- 上記のようにテキストファイルに書かれていたとして、”ランダム文字列3”という文字だけを取得したいのです。 つたない説明文で申し訳ございませんが宜しくお願いします。

  • Perlでのファイルの読み込み

    以下内容のファイルabc.csv を読み込み、1列目の文字列を指定したとき、2列目の文字列の内容を取得したいと思います。MEを指定したらMELONを取得したい。 その場合のコードを教えて下さい。 AP,APPLE OR,ORANGE ME,MELON PE,PEACH GR,GRAPE 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 【VBScript】ファイル整形

    以下の流れのプログラムを作成したく、 進めています。 下記コードの続きは、どういった感じで作りこんでいけば、 この操作が実現しますでしょうか。 恐れ入りますが、ご教示いただけますと幸いです。 ・vbsファイルにテキストファイルをドラッグする ・インプットボックスに抽出したい文字列を入力する ・テキストファイルを読み込んで、抽出した文字列を含む行を注した  別名のテキストファイル(末尾に_YYYYMMDDをつける)を生成する Option Explicit Dim intc, strf, strArguments, strInput, strmsgbox intc = 0 If WScript.Arguments.Count = 0 Then WScript.Echo "引数が指定されていません。" Else For Each strArguments In WScript.Arguments intc = intc + 1 strf = strArguments Next If intc > 1 Then MsgBox "2つ以上のファイルが指定されています。" & vbCr _ & "ファイルを指定し直してください。", 48, "Error" Else WScript.Echo strf strInput = InputBox("抽出したい文字列を入力してください。") strmsgbox = MsgBox strInput & "を抽出しました。" & vbCr _ & strInput & "を変換しますか?", 4 + 32 + 0, "確認" End If End If

  • csvファイルチェック

    いつもここで勉強させていただいています。 初めてPHPプログラムを書くことになって本をみてここの サンプルをみながらやっていく途中でどうしてもうまくいかないので皆さんの知恵をお借りしたいと思います。 <HTML> <?php //行番号表示 $leng = 0; $file_name = "roba.csv"; //区切り記号 $kigou = ","; //指定項目数 $count_koumoku = 20; // 関数呼び出し $e = koumokuCheck($file_name,$kigou,$count_koumoku); print "--;>チェック終了"; function koumokuCheck($file_name,$kigou,$count_koumoku){ $file = fopen($file_name, "r"); while ($data = fgetcsv($file, 1000,$kigou)) { //項目数カウントする $num = count ($data); if( $num != $count_koumoku) { //項目数カウントする(指定項目数より小さい場合メッセージ表示) $leng++; print "-->$leng"."<--項目数が足りてません <br>\n"; } else { $leng++; } } flock($file,LOCK_UN); fclose($file); } ?> </HTML> 上記のようなチェック機能をつくりましたが結果は一つの循環で結果(N行目が項目数が足りない)を返してくれますがここを配列を利用して項目数が足りない行番号を覚えさせて最後に足りない行番号を列挙して一つの行にまとめて表示したい(例:1,3,6,7,9の項目が足りません)と思っていますがなかなかうまくいきません!みなさんのよいアドバイスをまっています。

    • ベストアンサー
    • PHP

専門家に質問してみよう