C言語なら、俺に聞け! <31>

このエントリーをはてなブックマークに追加
>>945
atoiは使うなってことですか?
おまいら、fgetsとかfreadとかで破損とかずれるとか、、
f g e t c で 1 文 字 づ つ 処 理 し ろ よ
↓もうその話は飽きたよう。
>>942
Cの知識も煽りのレベルも低いな。
  テキストなら何でもfgetsの方がいいと思いこんでる奴は
  馬鹿の一つ覚えのfgetsを使え。
この方が的確な煽りだろ?

確かにfreadは読み出し途中でエラーが発生すると読み込みを中断し、
fgetsは途中でエラーが発生しても中断はしない。
特に読み込みエラーになった場合にエラー場所から
リトライとかを行いたい場合、fgetsでは無理。

が、そんなケースの発生は希だし、今回のケースの場合は
せいぜいできることは何行目が読めないとかいうエラーメッセージを
出してプログラムを終了するぐらいだろ?
よって無理にfreadは使う必要など無い。
おいおい
上司 VS 部下 でもって2chかよ おめでてーな
>>952
atoiのかわりにstrtolで。
そんなに面倒じゃないから、もっとstrtol利用していいと思うけど。マジで。
958942:02/09/13 16:08
>>955
はあ?
お前はファイル内容が破損すると必ず読み込みエラーが
発生するとでも思ってんのか?
ファイル破損=メディアからの読み出しエラー
とは限らないんだが。
知ったかぶって書いた割にはレベルが低かったな。

たとえばバイト化けして'\0'が混じったらどうなる?
そういうことに対処するなら最初からfreadを使った方がマシ。
fgetsと比べてコーディングの手間がかかるわけでもない。

> 今回のケースの場合は
> せいぜいできることは何行目が読めないとかいうエラーメッセージを
> 出してプログラムを終了するぐらいだろ?
これも読み出しエラーしか想定してないのでボツ。
>>903とかはよっぽど上から流れてくるデータが酷いプロジェクトばっかり
携わってたんだろうな。言わばテロに必要以上に怯えている今のアメリカみたいなもんか。
960684:02/09/13 16:15
あの....お取込中すみませんが、どなたかそろそろパート<32>
を立てませんか?(私は" 俺に聞け!"というレベルじゃないので立てれません。)
>>959
こいつ自分の使ってるブラウザにさえデータ破損を
考慮した処理が入ってることを知らないんだろうな (プ
次スレはShow-A孫でたのむ。
963959:02/09/13 16:37
おや?俺は別に煽ったつもりはなかったんだけどなぁ・・気に障ったか?スマソ
964fread提案者:02/09/13 16:43
んじゃ、最終結論を出してよろしいか。

どうぞお前ら fgetsでもfreadでもfgetcでもfscanfでも
好きなのを使ってください。
それでどうなろうが俺の知ったことか。
あと、仕事をください。
>>964
Show-Aたん?????
>>970
次スレよろしく〜
967964:02/09/13 16:52
>>965
意味がわかりませんでした。
このスレを立てたのは私のせがれだと聞いてます。それが何か?
>>684 sscanfの書式に注目。
----------------------------------------------------
#include <stdio.h>
main () {
  char buf[1024];
  while (NULL != fgets (buf, sizeof (buf), stdin)) {
    char name[1024];
    int id, a, b;
    float c, d, e, f;
    int count = sscanf (buf, "%d,%[^,],%d,%d,%f,%f,%f,%f",
                        &id, name, &a, &b, &c, &d, &e, &f);
    if (count != 8) continue;
    printf ("id=%d name=%s (%d %d %f %f %f %f)\n",
            id, name, a, b, c, d, e, f);
  }
}
----------------------------------------------------
39341725,山田川,66,83,198.0,4584.3,0.0,0.0
39341726,-該当なし-,-,-,-,-,-,-
39341725,アイウエオ,66,83,198.0,4584.3,0.0,0.0
----------------------------------------------------
C:\WINDOWS\デスクトップ\c-test>a < str.txt
id=39341725 name=山田川 (66 83 198.000000 4584.299805 0.000000 0.000000)
id=39341725 name=アイウエオ (66 83 198.000000 4584.299805 0.000000 0.000000)
----------------------------------------------------
s c a n f マ ン セ ー !
969955:02/09/13 17:10
>>958

> たとえばバイト化けして'\0'が混じったらどうなる?
freadと同じ動作をしますが何か?少なくともbccのfgetsは'\0'を読む。
お前、教えて君やってないで自分で試してみろよ。

ところでお前は'\0'が混じってるデータをテキストデータと呼ぶのか?
あんたファイルの仕組みを理解してないよ。

> fgetsと比べてコーディングの手間がかかるわけでもない。
1行のバイト数が変わってしまった場合は?
例えばftpでしくじって\r\nが\nに化けた場合。

> これも読み出しエラーしか想定してないのでボツ。
他のエラーって何?バイト化けして'\0'が混じったデータなら
freadでも文字列のチェックは必要だろ?

> 知ったかぶって書いた割にはレベルが低かったな。
お前がな、捨てハン付けてまで、馬鹿丸出しの発言するなよ。
970よっしゃ:02/09/13 17:14
新スレ立てるけどファイル入力の話はこっちで完結させろよな<一部の粘着クン
971684:02/09/13 17:19
>>968
なるほど。sscanf一本でもいけるのですね。
しかしこんな書式知らなかった。
勉強になります。

972968:02/09/13 17:24
>>971
%[^,]=カンマ以外の文字列、という意味。
俺も調べて初めて知ったんだけど、色々あるみたいだね。とっつきにくいけど
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
こういう短い行ごとの処理なら、fgets+sscanfをうまく使えると思う
973SHOW-A孫:02/09/13 17:24
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
>>973
貼る場所が違うぞ(藁
975SHOW-A孫:02/09/13 17:31
ぐはっ!なんか書き込まれてないと思ったら前スレの方に貼ってたのか(;´Д`)

ちなみに新スレ
http://pc3.2ch.net/test/read.cgi/tech/1031905402/
976955:02/09/13 17:38
>>970
> <一部の粘着クン
俺については了解。あっちではこの話題は出さない。
というかあの知ったか君の完全敗北で完結してるけどね。
なんだかんだ行ってもム板の顔だね、このスレは。
最近は1週間で使い切るし。
そうだよね〜。2、3日忙しくて目通せないと、すげーレスついてるし。
>>978
SHOW-Aのカリスマ性が関係してるとかしてないとか…
いや、関係はないわ ごめん
980デフォルトの名無しさん:02/09/13 17:56
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< えふりどえふりど!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< えふりどえふりどえふりぃどぉ〜〜!
えふりぃど〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
>>980
えいどりあん?
982958:02/09/13 18:45
>>969
ぎゃはは。全然意味がわかってないよお前。
> freadと同じ動作をしますが何か?少なくともbccのfgetsは'\0'を読む。

'\0'が混じった時に、どこまでが読み込んだデータの終端なのかを
どうやって判断するんだ?という意味なんだが。
(初心者が陥りそうな罠がまだ残ってるから反論には気をつけてね)

しかも'\0'というのは一例を挙げただけで、
もっと深刻な事態になる文字もあるわな。わかると思うけど。

だから
> そういうことに対処するなら最初からfreadを使った方がマシ。
> fgetsと比べてコーディングの手間がかかるわけでもない。
と書いてるんだよ。

> ところでお前は'\0'が混じってるデータをテキストデータと呼ぶのか?
> あんたファイルの仕組みを理解してないよ。
これはお話にならん。エラー時の話をしていたはずだが。
お前のところのテキストファイルは壊れようが何しようが
テキストデータしか存在しないのかもしれんが。

> 1行のバイト数が変わってしまった場合は?
> 例えばftpでしくじって\r\nが\nに化けた場合。
お前やっぱりファイルの仕組みを理解してないよ。
ファイルの破損とお前がftpを操作をしくじって
ファイル内容を書き換えるのでは意味が違う。
しくじった後のファイルは、あらかじめ決められた長さ
の固定長ファイルとは言えない。
freadならどこが終端なのかわかるのかな・・・
903とその信者は自分のつくったソフト以外は使うなってことだよな。
他人のつくったソフトにfgetsを使っているところがあって、データを失うようなことになったら困るもんな(藁
UNICODE(UTF16)テキストなら'0'が大量に入るわけだが。
俺が作ってるテキストエディタは、fgets関数を使用しております。
・・・今のままでいいのか、fread関数に変えるべきか・・・。
987982:02/09/13 19:18
だめだ俺、これ以上付き合うと
自分の性格が歪んでしまいそうなので辞退する。

>>969
ごめん。
この件について俺からはもう書くことは無いけど、
俺が間違ってたよ。
ところで「さいたまさいたまさいたま」の意味が良くわからん。
誰か教えれ。
>>986
固定長テキストエディタなんて要らんぞ
>>986
fread厨の言うことを真に受けるなよ。
>>989
その辺は大丈夫です。
ちゃんと、メモリ資源がつづく限りテキストを読めるよう改造する予定ッス。
どんなに改造しても、
自分の窓を持たないエディタなんて他の人に使ってもらえそうにないですけど・・・(涙
それでも、勉強のつもりで自分の限界まで改造してみます。

>>990
う〜ん、fgetsで大丈夫なんですかね〜・・・。
上の方で、ファイルを読み込んだだけでファイルが壊れる事があるってありますけど・・・
マジッスか!?
うっかりバイナリとかをfgetsで読みに行ってファイル壊れるってことありませんよね?(汗
読み込んだデータを書き込まなきゃ大丈夫
>>992
ですよね!
うん、安心しました・・・。
ありがとうございます。
1000!
1000?
fread派はもう言い残すことは何もありませんか?
1000逝く前に言いたいことがあればどうぞ。
struct res buf[1000];
fread (buf, sizeof (struct res), 1001);
あ、FILE*忘れた
999
1000955:02/09/13 20:46
>>982
> '\0'が混じった時に、どこまでが読み込んだデータの終端なのかを
> どうやって判断するんだ?という意味なんだが。
どこまでが読み込んだのかを判断する必要はない。
正しく読めたかを判断できればよい。
どっちにしろ堅牢なプログラムを作る必要があるのなら、
読み込んだデータは正しいフォーマットかどうかのチェックをするんだから
フォーマットのチェックで引っかかる。

> もっと深刻な事態になる文字もあるわな。
'\n'か?ところで、コントロール文字が化けるケースってあまり思いつかないんだけど
何するとコントロール文字が化けるの?
お前の作った糞プログラムを動かしたりするとか

> これはお話にならん。エラー時の話をしていたはずだが。
了解、テキストファイルが壊れてバイナリになってしまったケースだな
それならばなぜ

> しくじった後のファイルは、あらかじめ決められた長さ
> の固定長ファイルとは言えない。
とかぬかすんだ?自分で矛盾していること言ってることに気づいてないのか?
テキストファイルがバイナリファイルに化ける可能性は考慮して、
固定長ファイルの1レコード長が変わる可能性は考慮しないのか?

固定長ファイルの1レコード長が変わる可能性の方が遙かに高いと思うが?
freadの方が堅牢なんて恥ずかしい無知を晒した上に、
今度は自分の考えの浅さを露呈して楽しいか?
まぁ、世の中にはそういう変態がいることは知っているけどね。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。