🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #515

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

#515
From: keizi kounoike
Date: Fri, 20 Mar 1998 00:00
75 lines
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-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: "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