Article View: fj.lang.c
Article #498Re: [Q]区切りなしデータを文字型でない配列に読むには?
From: Hiroyuki Minesita
Date: Fri, 20 Mar 1998 00:00
Date: Fri, 20 Mar 1998 00:00
80 lines
3586 bytes
3586 bytes
From article <6esjd9$4t@sakunami.gw.tohoku.ac.jp>
by chiba@dges.tohoku.ac.jp
> [Q]長くて区切り文字のない文字列(数字列)を、ファイルから、行単位で
> (一行丸ごとという意味)、文字型でない配列に、可能な限り簡潔に、
> 読み込むには?
根本的にはデータ構造が悪いのでそれを考え直すのが一番です。
#身も蓋もありませんが……(^^;
> なぜこんなことを考えているかというと、最初は
>
> int i;
> FILE *fp; /* データファイルのファイルポインタ */
> char CharArray[6]; /* 5バイト分?のデータを一時的に読み込む配列 */
> double DblData[350]; /* 実際にデータを格納する配列 */
> for(i=0; i<350; i++) {
> fread(CharArray, 5, 1, fp);
> CharArray[6] = '\0';
> DblData[i] = atof(CharArray);
> }
概ねこういう形になるでしょう。
多分、他を試してもこれ以上は簡単にならなかったんじゃないで
しょうか?
> ここで、ループを使って5文字分ずつ読んでいくのではなく、一行分ずつ
> 一気に読んでしまいたいという考えが浮かんできました。そこでまずは
>
> char CharArray2D[350][5];
> fread(CharArray2D, 5, 350, fp);
> for(i=0; i<350; i++)
> DblData[i] = atof(CharArray2D[i]);
ループを使っていますよね?
> そこで次にダイレクトに
> FILE *fp; /* データファイルのファイルポインタ */
> double DblData[350]; /* 実際にデータを格納する配列 */
> fread(DblData, 5, 350, fp);
>
> などということはできないかと思ってやってみました(というかこれで
> すんなりうまくいっていたらニュースには投稿していませんでしたが)。
何故出来ると考えられるかが問題な気がします。(^^;
根本的に変数がメモリにどういう風に存在するのかを理解する
べきだと思います。
> ---(以下、自分の作業環境依存の話?)-------------------------------
>
> ところが、doubleやfloatには 0.0 より小さい(E-10~E-19のオーダー)値、
> int には 750000000~950000000 くらいの大きな値が入ってしまいます。
>
> fread(DblData, 5, 1, fp);
> fread(DblData, sizeof(DblData[0]), 350, fp);
> fread(DblData, sizeof(DblData[0]), 1, fp); /* これできちんと読み込め
> ないのはおかしい? */
読めないのが当然です。
> のようにもしてみましたが、結果はいずれも同じでした。
> よって、上の結果は自分の環境(OSやコンパイラ)に依存している可能性
> もあります。
依存していません。言語には多少依存しているかもしれませんが……(^^;
sizeof(DblData[0]) の値がいくつになるかを確認しましょう。
> アドレス演算子&を用いて
これ以下はポインタを理解していないと見受けられます。
---
@) ---------------------- 〃
(・> ヾ<・)
ι ν 峯下博幸 ( ~彡
(m_m)っ ---------------------- κκ
Technical Details
Message-ID:
<6esmcd$30l$1@sunny.njk.co.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<6esjd9$4t@sakunami.gw.tohoku.ac.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 106434,8756f6f59b5f78c5 X-Google-Attributes: gid106434,public From: minesita@rd.njk.co.jp (Hiroyuki Minesita) Subject: Re: [Q]区切りなしデータを文字型でない配列に読むには? Date: 1998/03/20 Message-ID: <6esmcd$30l$1@sunny.njk.co.jp> X-Deja-AN: 335807667 References: <6esjd9$4t@sakunami.gw.tohoku.ac.jp> Mime-Version: 1.0 (generated by MimeKit/1.7) Distribution: fj X-Forwarded: by - (DeleGate/4.3.3) Content-Type: text/plain; charset=ISO-2022-JP Organization: NJK CORPORATION. Japan Newsgroups: fj.lang.c