Article View: fj.lang.c
Article #515Re: [Q]区切りなしデータを文字型でない配列に読むには?
From: keizi kounoike
Date: Fri, 20 Mar 1998 00:00
Date: Fri, 20 Mar 1998 00:00
75 lines
2786 bytes
2786 bytes
鴻池といいます。
現在Cを勉強中で,レベルは千葉さんが述べている要件に合致していると思います。
それで,それなりに考えたのを書いてみました。
>千葉@東北大 と申します。
>
>[Q]長くて区切り文字のない文字列(数字列)を、ファイルから、行単位で
> (一行丸ごとという意味)、文字型でない配列に、可能な限り簡潔に、
> 読み込むには?
>
>といったところです。
>「可能な限り簡潔に」とは、ソースコードとしても短く、かつ、オンライン
>マニュアルを読めて「はじめてのC」(技術評論社)程度にC言語の知識を
>持ち合わせている(C++はほとんどわからない)人が、ソースプログラム
>を読んで多くてもせいぜい10回程度(そのプログラムを)読み返すだけで理
>解できるレベルと考えて下さい。
>
-------------以下の通り------------------
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define su 5
main(){
int i=0,j=1,c,co=0;
char temp[]="aaaaaa";
long *p,LN,RN;
FILE *fp;
if ((fp=fopen("data-1","r"))==NULL){
printf("can't open data-1\n");
exit(1);
}
fseek(fp,0,SEEK_END);
LN=(long)ftell(fp);
RN=LN/(sizeof(char)*su)+1;
if ((p=(long *)malloc(sizeof(long)*RN))==NULL)
printf("can't malloc\n");
rewind(fp);
while((c=fgetc(fp))!=EOF){
if (isdigit(c)){
temp[i]=c;
i++;
}
else
continue;
if (i==su) {
p[j]=atol(temp);
j++;
co++;
for(i=0;i<(su+1);temp[i]='a',i++);
i=0;
}
}
if (isdigit(temp[0])){
co++;
p[j]=atol(temp);
}
p[0]=co;
/* data print */
printf("total number of record = %d\n",p[0]);
for(i=1;i<=p[0];i++)
printf("%d\n",p[i]);
}
----------------------------------------------
ただ,これは千葉さんの1行単位で読むという条件からずれており,数列がファイル
の最後までつながっているとみなし,それを5文字単位で切り取るように,勝手に条
件を変更したので論外かも知れませんが。
Technical Details
Message-ID:
<6etlh1$36t$1@news.naruto-u.ac.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: "keizi kounoike" <kounoike@naruto-u.ac.jp> Subject: Re: [Q]区切りなしデータを文字型でない配列に読むには? Date: 1998/03/20 Message-ID: <6etlh1$36t$1@news.naruto-u.ac.jp> X-Deja-AN: 335916265 Content-Transfer-Encoding: 7bit References: <6esjd9$4t@sakunami.gw.tohoku.ac.jp> X-Server-Date: 20 Mar 1998 11:56:17 GMT Content-Type: text/plain; charset="iso-2022-jp" X-MimeOLE: Produced By Microsoft MimeOLE V4.72.2106.4 Organization: Naruto University of Education, Tokushima, Japan. Mime-Version: 1.0 Newsgroups: fj.lang.c