掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26625

テキストファイルの一部をprintf
投稿者---mark(2006/04/16 23:56:19)


以下のテキストファイルから
101 test101だけを出力したいのですがやり方が分かりません。
どうすればいいのでしょうか?

ソースファイルは以下のように書きましたが全ての列が呼び出されてしまいます・・・

#include "stdafx.h"
#include<stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
FILE *fp;
char moji[256];
char number[10];
char a;
// int i;


if ((fp = fopen("c:\\test.txt", "r")) == NULL) {
printf("file open error!!\n");
exit(1);
}

while (fgets(moji, 256, fp) != NULL) {
char number[10] = "";

printf("%s", moji);
if (a=101 ) {
strcpy(number,moji);
number[10]='\0';


}
else {
printf("");

}





}
fclose(fp);

return 0;
}



textファイル内容


100 test100
101 test101
102 test102
103 test103




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:テキストファイルの一部をprintf 26626 RiSK 2006/04/17 00:40:15
<子記事> Re:テキストファイルの一部をprintf 26628 Blue 2006/04/17 09:26:24


No.26626

Re:テキストファイルの一部をprintf
投稿者---RiSK(2006/04/17 00:40:15)


>以下のテキストファイルから
>101 test101だけを出力したいのですがやり方が分かりません。

テキストファイルを利用する必要性が全く感じられません。
#include<stdio.h>
int main(void){puts("101 test101");}
これで十分に思えます。

何行目を出力だとか,何らかの条件は無いのですか?


この投稿にコメントする

削除パスワード

No.26635

Re:テキストファイルの一部をprintf
投稿者---mark(2006/04/17 12:18:32)



すでに存在するデータがあり、ファイルのデータ量が多く何行目を出力したいという情報すら分からないテキストファイルの中から欲しい列を出力するプログラムを作ろうと考えています。

現在、データファイルをワードパットで開いて、検索を使ってほしい列を検索している状態です。

列の一番前にある文字を判断して出力するプログラムを作りたいと考えています。
fopenでテキストファイルの読み込みが出来ることを知りテキストファイル呼び出しのプログラムを作ることを思いつきました。

説明が足りなくてすみません。


この投稿にコメントする

削除パスワード

No.26636

Re:テキストファイルの一部をprintf
投稿者---RingBuffer(2006/04/17 12:52:33)


textのフォーマットがわかっているのなら、
一行の先頭数バイトをstrncpyで取り出す。
それをstrcmpで比較したいものと比較する。

atoiが使える環境ならそれを使う。

取りあえず、上記をググって手を動かして下さい。
失敗から得るものは多いですよ。


この投稿にコメントする

削除パスワード

No.26637

Re:テキストファイルの一部をprintf
投稿者---RiSK(2006/04/17 15:51:13)


>現在、データファイルをワードパットで開いて、検索を使ってほしい列を検索している状態です。

だから,どのように検索しているのかと小一時間(ry
「検索する文字列」は固定なの?
パターンがあるの?
それともユーザに入力させるの?

「単語単位で探す」オプションは必要?
「大文字と小文字を区別する」オプションは必要?

>列の一番前にある文字を判断して出力するプログラムを作りたいと考えています。

判断とは?

やりたいことはイメージできましたが,
条件(いわゆる仕様)がはっきりしなきゃなんとも。


この投稿にコメントする

削除パスワード

No.26638

Re:テキストファイルの一部をprintf
投稿者---Blue(2006/04/17 16:03:03)


いちいちプログラム作らなくても、Windowsならば
findstrコマンドで十分なような、、、

C:\WINDOWS\system32>findstr "^101" "c:\test.txt"



この投稿にコメントする

削除パスワード

No.26628

Re:テキストファイルの一部をprintf
投稿者---Blue(2006/04/17 09:26:24)


本題と関係ないですが、基本的なことで。
>if (a=101 ) {
>strcpy(number,moji);
>number[10]='\0';
>
>
>}
ここ問題大有りですね。

  1. aは初期化していないので、なんだかわからない値と比較している。 (VCならwarningでるはずですけど)
  2. strcpyで領域以上の文字をコピーする可能性がある。 (mojiに9文字以上あると、やばいです)
  3. numberは[0]〜[9]までしか使えないにもかかわらず、[10]に値を入れようとしている。

# 今回はたまたま動いているだけで、カナリ危険なコードです。


この投稿にコメントする

削除パスワード

No.26629

Re:テキストファイルの一部をprintf
投稿者---RingBuffer(2006/04/17 09:37:04)


ついでに言えば

>>if (a=101 ) {

比較じゃなく、代入ですね。


この投稿にコメントする

削除パスワード

No.26631

Re:テキストファイルの一部をprintf
投稿者---Blue(2006/04/17 09:44:41)


>ついでに言えば
>
>>if (a=101 ) {
>
>比較じゃなく、代入ですね。
ホンマですねw
代入だとwarningでませんね。この場合だと常に if 文実行されますね。

まぁ、ファイル読み込むところまではきちんとコードがかけているので、
一行の文字列をどのようにして比較するかですね。
strncmpをつかって比較するのが一番簡単かな。
(aって変数もnumberっていう変数もいらないよね?)


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧