総ありがとう数 累計4,308万(2014年11月23日現在)

毎月4,000万人が利用!Q&Aでみんなで助け合い!

-PR-
kuronastu

ある文字列を5文字ずつ抜き出だすC言語のプログラムを作りたいのですが,
なかなか苦戦しています.
どなたかご教授頂けるとたすかります.

ちなみに,使っているデータ国土地理院発行の火山10mメッシュデータで,こんな感じです・・・

-9999-9999-9999-9999 1255 1259 1257 1252 1245 1238 1231 1224 1218

1メッシュが整数値5文字で表されており,それが1000個横に並んでいます.全てのメッシュの間にスペースがあれば楽なのですが,それがない時もあります・・・
よろしくお願いします.
  • 回答数8
  • 気になる数0

Aみんなの回答(全8件)

回答 (全8件)

  • 2008-10-04 08:27:26
  • 回答No.3
当該データのフォーマットが絶対に崩れないのであれば、

#include <stdio.h>

int main(void)
{
char s[] = "-9999-9999-9999-9999 1255 1259 1257 1252 1245 1238 1231 1224 1218";
char str[1000][6], *p = s;
int n, i;

for (i = 0; i < 1000 && *p; i++, p += 5) {
if (sscanf(p, "%5d", &n) == 1) {
sprintf(str[i], "%5d", n);
printf("'%5s'\n", str[i]);
}
}
return 0;
}
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2008-10-04 05:56:59
  • 回答No.2
 
 この方がいいのかな?

#include <stdio.h>
#include <ctype.h>

#define MAX 20

int Split(FILE *fp, char table[][6], int n)
{
int c, i = 0, j = 0;

while((c = fgetc(fp)) != EOF){
if(isdigit(c)){
table[i][j] = c;
table[i][++ j] = '\0';
j %= 5;
if((i += !j) >= n) break;
}
}
if(i < n) table[i][0] = '\0';
return i;
}

int main(void)
{
FILE *fp = fopen("test.dat", "r");
char table[MAX][6];
int i, j;

if(!fp) return 1;
j = Split(fp, table, MAX);
for(i = 0; i < MAX && table[i][0]; ++ i) puts(table[i]);
printf("(DATA : %d)\n", j);
fclose(fp);
return 0;
}
 
"test.dat"
-99999-9999999999-99999 12355 1235912357 12352 12345 12338123311232412318
 
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2008-10-04 03:13:05
  • 回答No.1
#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define MAX 20

int Split(char *str, char table[][6], int n)
{
char *p = str + strlen(str);
int i;

for(i = 0; i < n && str < p; i ++){
while(!isdigit(*str)) str ++;
sprintf(table[i], "%.5s", str);
str += 5;
}
if(i < n) table[i][0] = '\0';
return i;
}

int main(void)
{
char *str = "-99999-99999-99999-99999 1235512359 1235712352 12345 12338123311232412318";
char table[MAX][6];
int i, j;

puts(str);
j = Split(str, table, MAX);
for(i = 0; i < MAX && table[i][0]; i ++) puts(table[i]);
printf("(DATA : %d)\n", j);
return 0;
}
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2008-10-04 08:40:12
  • 回答No.4
5文字は無視して数値が空白か-記号のみで区切られていると保証されているなら
#include <stdio.h>
#define MAX_DATA 1000

int mesh_data[MAX_DATA];

int main(void)
{
FILE* fp;
int i = 0;

fp = fopen("test.txt", "r");
if (!fp) {
printf("file open error\n");
return 0;
}
while (!feof(fp)) {
fscanf(fp, "%d", &mesh_data[i]);
printf("%d\n", mesh_data[i]);
if (++i >= MAX_DATA) {
break;
}
}
fclose(fp);
return 0;
}
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 2008-10-04 09:06:07
  • 回答No.5
> ある文字列を5文字ずつ抜き出だす

という仕様からすると、結果は文字列でないとまずいのではないだろうか。
もし結果は整数値であるとすると、#3でsscanf()した結果を直接int型の配列に入れてしまえばよい。
通報する
  • 同意数0(0-0)
  • ありがとう数0
8件中 1~5件目を表示
  • 回答数8
  • 気になる数0
  • ありがとう数3
  • ありがとう
  • なるほど、役に立ったなど
    感じた思いを「ありがとう」で
    伝えてください

関連するQ&A

その他の関連するQ&Aをキーワードで探す

別のキーワードで再検索する

あなたの悩みをみんなに解決してもらいましょう

  • 質問する
  • 知りたいこと、悩んでいることを
    投稿してみましょう
-PR-
-PR-
-PR-

特集

専門医・味村先生からのアドバイスは必見です!

関連するQ&A

-PR-

ピックアップ

  • easy daisy部屋探し・家選びのヒントがいっぱい!

-PR-
ページ先頭へ