🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #502

Re: [Q]区切りなしデータを文字型でない配列に読むには?

#502
From: shino
Date: Fri, 20 Mar 1998 00:00
65 lines
2762 bytes
しのです。

Tomoaki Chiba wrote in message <6esjd9$4t@sakunami.gw.tohoku.ac.jp>...
>
>千葉@東北大 と申します。
>
>Subjectが長いのはよろしくないと思って切ってしまいましたが、正確には
>
>[Q]長くて区切り文字のない文字列(数字列)を、ファイルから、行単位で
>   (一行丸ごとという意味)、文字型でない配列に、可能な限り簡潔に、
>   読み込むには?
>
>といったところです。
>「可能な限り簡潔に」とは、ソースコードとしても短く、かつ、オンライン
>マニュアルを読めて「はじめてのC」(技術評論社)程度にC言語の知識を
>持ち合わせている(C++はほとんどわからない)人が、ソースプログラム
>を読んで多くてもせいぜい10回程度(そのプログラムを)読み返すだけで理
>解できるレベルと考えて下さい。


「はじめてのC」を読んでないので、どこまで「簡潔」に出来たか解りませんが、
この記事の後ろにサンプルの関数を付けます。

>もう一つ重要なのはこのデータの各行は 200~400×5 個位の数字から成り立
>っているということです。すなわち行ごとに例えば Data[350] のような配列
>に読み込むことを考えます。


これは、一行あたりのデータの個数は可変ということですか?
もし不変なら、下の関数を使った後にfreeせずに済むのですが・・・。

/*
引数:
data 格納するdouble型へのポインタへのポインタ
str 取り出したいデータの数字が格納された文字列
vlen データ一つあたりの文字数
戻り値:
データの数(*dataの要素数)
*/
int GetValues(double **data, char *str, int vlen)
{
 int i, ret;
 char *buf;

 ret = strlen(str) / vlen;
 *data = (double*)malloc(sizeof(double)*ret+1);
 buf = (char*)malloc(vlen+1);
 for(i = 0; i < ret; i++)
 {
  strncpy(buf, str+(i*vlen), vlen);
  buf[vlen] = '\0';
  (*data)[i] = atof(buf);
 }
 free(buf);
 return ret;
}


--
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
HandleName:しの
E-Mail   : shino@planet.forum.or.jp
HomePage : http://www2.tky.3web.ne.jp/~shino211/index.shtml
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
Technical Details
Message-ID: <6esp55$kul$1@news.fureai.or.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <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: "shino" <shino211@geocities.or.jp>
Subject: Re: [Q]区切りなしデータを文字型でない配列に読むには?
Date: 1998/03/20
Message-ID: <6esp55$kul$1@news.fureai.or.jp>
X-Deja-AN: 335823616
Content-Transfer-Encoding: 7bit
References: <6esjd9$4t@sakunami.gw.tohoku.ac.jp>
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-2022-jp"
X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4
Organization: Fureai Internet
Newsgroups: fj.lang.c