23481 34958 432 ・・・  
83829 93828 210 ・・・  
  ・     ・    ・
  ・     ・    ・
  ・     ・    ・
上の様に各列に対して決まったビット数で表示されている数値のデータの
一番最後の桁(一番上の行なら 1、8、2)を消去するプログラムを
作りたいのですが、
各数値の間にスペースがあるので、ヌルコードの一つ手前の数値を消去すると考えたほうが良いのか、それともビット数(桁数)が決まっているので各列に対して最後の桁を指定して消去した方が良いのでしょうか?
また、その「消去する」という
プログラムには何の関数を使ったら良いのでしょうか?

このプログラムへの取っ掛りが見つからず、困っています。よろしくお願いします。

A 回答 (3件)

データの間にスペースがあるので、このデータがファイルにあると仮定します。


1.1行読み込む(fgets)
2.スペース区切りでデータを区切る(strtok)
3.区切った文字列("23481\0")の最後にNULLをセット
  buff[strlen(buff)-1] = NULL;
4.2へNULLまで繰り返す。
5.1行別ファイルに書き出す。
6.1へEOFまで繰り返す。
簡単なロジックかいてみました。
コンパイルもしてませんので、動くかどうかわかりません。
また、エラー回避も入れてません。
試して検証して、改造してご利用ください。

FILE *fpw, *fpr;
char buff[1025];
char bf[6];

fpr = fopen("read.txt", "r");
fpw = fopen("write.txt", "w");
while(fgets(buff, 1024, fpr)) {
tok = strtok(buff, " ");
if (!tok) exit(-1);
strcpy(bf, tok);
bf[strlen(bf)-1]=NULL;
fprintf(fpw, "%s", bf);
while(tok=strtok(NULL," ")) {
strcpy(bf, tok);
bf[strlen(bf)-1]=NULL;
fprintf(fpw, " %s", bf);
}
fprintf(fpw, "\n");
}
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます!
解説付きのロジックなんて本当に助かります。
有効に使わせていただきます。

お礼日時:2002/03/21 22:05

ご質問の数値というのは、char型で格納されている文字列なのでしょうか?


それとも、intやlongなどで数値型で格納されているのでしょうか?
「決まったビット数で表示されている」というのも意味がよくわかりません。「決まったバイト数(桁数)で何らかの領域に格納されている」ってことでしょうか?

領域に格納された数文字列の最後の1桁を消去すると判断して、私が思いつく方法としては、
1列目のデータの先頭から、strrchr関数でヌルコードを検索しながら、strncatで数字列の長さ-1のサイズで別の用意しておいた領域にコピーして行く。
って感じでしょうか。
関数については、リファレンスで確認してください。

この回答への補足

質問する側としてのマナーを無視した質問の仕方をしてしまい
申し訳ありませんでした。

数値は、文字列で、おっしゃる通りに決まったバイト数で格納されています。

補足日時:2002/03/21 13:13
    • good
    • 0

データは、文字列ですか?


ファイルからの読み込みですか?それとも電文?
1行のデータ数は決まっていますか?
行の終端は\nですか?NULLですか?

その辺がわからないと答え様が無いです。

この回答への補足

質問するにあたって、最低限の情報を言わずに質問してしまい
申し訳ありませんでした。
ちなみにデータは、ファイルからの読み込みです。
1行のデータ数は決まっています。
行の終端については、¥nです。

補足日時:2002/03/21 13:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ