• ベストアンサー

あるテキストファイルに書かれている内容が数字だけで書かれているかどうかのチェック

今、C言語の勉強をしていて(かなり初心者です)、あるプログラムを作るうえで、あるテキストファイルに書かれている内容が数字だけで書かれているかどうかのチェックする機能(具体的に言うと、129や784は適切だが、f1ewや48dなどはエラーとしたいんです)とその数字が適切な範囲にあるかとチェックする機能をつけたいのですが、数字だけで書かれているかどうかのチェック機能をどのようにすればいいのかさっぱり分かりません。 どなたか助言をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

数字のチェックだけでいいんですね。(前の質問を見てませんでした) とりあえず、テキストファイルを最初から最後まで1文字ずつチェックすればいいのでは? #include <ctype.h> として、 isdigit関数(マクロかも)を使えば、引数が10進数字以外のとき0を返します。

secret-goo
質問者

お礼

ありがとうございました。 わざわざ前の質問まで見ていただいて、お手数をおかけしました。

その他の回答 (1)

回答No.1

どんなプログラムを作りたいかもう少し詳しく考えましょう。 ・数字は1個だけですか? ・数字は負数もありえますか? ・改行コードもエラー対照ですか? ・数字が複数の場合、区切り文字は何ですか?(区切り文字はエラー対照外ですね) たぶん、ファイルを開く→1文字ずつ読んで数字以外ならエラー→数字なら数値へ変換して範囲チェック→ファイルの最後まできたらファイルを閉じてチェックOK という流れだと思いますが。

関連するQ&A

  • 書かれている値のエラーチェックをした後にコピーしたいんですが・・・

    テキストファイルAに書かれている値をエラーチェックをしてから、テキストファイルBにコピーするというプログラムを作るため、とりあえずテキストファイルAをテキストファイルBにコピーするという部分だけ作ってみました。(下に載せておきます) これはきちんと動作したので、つぎにエラーチェック機能(具体的には、aファイルには10以上200未満の正の数が書かれていて欲しいため、エラーチェック機能としては、文字ではなく数字が書かれているか? 書かれている値が10以上200未満か? という2つのチェック機能)をつけようとしたのですが、文字ではなく数字が書かれているか?というチェック機能は作れそうですが、書かれている値が10以上200未満か?というチェック機能がどうすればいいのか分かりません。というのも、下のプログラムは1文字ずつ出力しているためチェック不可能なような・・・ということは根本的に違うのでしょうか? 下のプログラムもテキストを見ながら何とか作成したようなレベルなんで、どなたか助言をお願いします。 #include<stdio.h> #include<process.h> void main(void) { FILE *fp1,*fp3; int a,c; if((fp1=fopen("d:a.txt","r"))==NULL){ printf("aファイルが開けません\n"); exit(1);   } if((fp3=fopen("d:b","w"))==NULL){ printf("bファイルが作成できません\n"); exit(1); } while((a=getc(fp1))!=EOF) putc(a,fp3); fclose(fp3); if((fp3=fopen("d:b.txt","r"))==NULL){ printf("bファイルが開けません\n"); exit(1); } while((c=getc(fp3))!=EOF) putchar(c); fclose(fp1); fclose(fp3); }

  • 外部テキストファイルから数字しか読み込まない現象について

    FLASH MX 初心者です。 外部テキストファイルから文字データを読みこませたいのですが、ムービープレビューでチェックすると 数字以外の文字データが読み込まれていません。FLASHの設定は文字のプロパティで、 テキストの種類:ダイナミックテキスト フォント:_ゴシック(デバイスフォントにしました) 行タイプ:複数行(複数行にわたるため) 変数:txt としています。 テキスト読み込みのアクションスクリプト内1行目には『System.useCodepage = true; 』をいれました。 またテキストファイルは文章の改行部分を『%0D%0A』で区切り、問題なく機能しています。 何が原因でテキストファイルにある数字以外の文字(漢字体・英字体)が表示されないのでしょうか。 環境 OS:WindowsXP(SP2) アプリケーション:FLASHI MX 7.2 よろしくお願いします。

    • ベストアンサー
    • Flash
  • C言語のテキストファイルの読込み

    必要に迫られてC言語でテキストファイルの読込みを行う プログラムを作成しなければならなくなりました。 whileとfscanfを用いて書式を指定して一行ずつ読込むことができる ということは知っていますが、その際、たとえば読み込むファイルが 20行のテキストファイルだったとして、10行目から読込みを 行いたい場合はどのようにプログラムを書けばいいのでしょうか? なにぶんC言語初心者ですのでよろしくお願いします。

  • 【エラーチェック・最適化 について】

    こんにちは。 最近PCの動作が気になって(少々処理速度が急激に落ちる時があって)、 エラーチェックと最適化を以前よりやるようになりました。 ただ、PCを構い始めた時に義務的に言われてテキトーな時期(好きな時)に 一応でやっていたので、「このまま適当でやるのはヤバイんじゃ?」と 思いこちらで質問させて戴こうと思いました。 (しとけ、と言った本人も適当だったのでハッキリとわかりません) 質問は ・エラーチェック/最適化はどれくらいの頻度ですればいいか、またそれ以外でやったほうがいい場合はあるのか(HDDから普段しない音がしたとき、とか ・エラーチェック、最適化をするとどういった効果があるのか。 (精々やるとPCにとって優しい事、程度しかわかりません。やるよりはやったほうがいい、という感じです) ・エラーチェック、最適化をする時、した後。 (そのまま使わず再起動したほうがいい、とか、他にできればこれも追加してやるようにしたらいいものがある、とか) 今は一応、エラーチェック(PCを再起動したら予約でWindowsログイン手前でエラーチェック(スキャン?)が始まるというタイプなので、まとめて予約をして、その後:C、:D、:Fと3つHDDがあるのでひとつずつ最適化という手順です。 (:Fは大抵のPCでいう:CみたいにOSなどのメインプログラムなどが突っ込んであります。 :CにDLしてきたプログラム(?)、クライアント、:Cと同じHDD内にある:Dには写真やテキストなどのデータファイルが入っています。 OSはWindows2000です) お手隙の折にでもご回答、アドバイス頂けるととても助かります。

  • テキストファイルの内容を文字列として格納する方法を教えてください。

    windows xp、visual C++でプログラムを作成している初心者なんですが、コンマ(,)で区切られたテキストファイルの一部分を文字列として取得する方法が知りたいです。たとえば"sample.text"というファイル名で、 "BAAE0001","0","8","1000100010001000" "BAAE0002","0","8","1000100010001010"  ・  ・  ・ と続いていくテキストなんですが、一行目のBAAE0001をa1に入れ、0をb1に入れ、8をc1に入れ、1000100010001000をd1に入れて、二行目以降もa1、b1…の数字の部分を1ずつ増やして同じように格納していくというふうにしたいです。わかる方、いい方法がある方がいましたらどうか教えてください。

  • phpでテキストファイルの作成

    今phpを勉強しています。 そこで私は今テキストファイルをデスクトップに作るようなプログラムを考えているのですがうまく行きません。 HTMLとの連動でボタンが一つあり、そのボタンを押すとデスクトップ上にテキストファイルが作成できるようなプログラムを組みたいと思っています。 具体的な動作手順はこのようなプログラムを考えております。 1.HTMLのボタンを押す 2.テキストファイルの内容に「あいうえお」と書き込んで「あいうえお」と書き込まれたテキストファイルをデスクトップ上に表示する。ファイル名は「test」で良いです。 勉強としてこのようなプログラムの組み方を教えていただきたいと思っております。 どなたか分かる方がいましたら教えて欲しいと思っています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • テキストファイルからの読み込みがうまくできません(>_<)

    C言語初心者の学生です。 読んでいただきありがとうございます。 テキストファイルに数字を並べ、それを読み込んで char型の変数に入れ、さらにatofによってfloat型に変換し、計算に使っていくということがしたいのですが、 テキストファイルの書き方がおかしいのか、プログラムの書き方がおかしいのか、テキストファイルに書いたとおりの値とは異なるおかしな値が表示されます・・・ だいたいのプログラムの書き方は、 char型のa2、float型のa[n][n]、FILE *fpINを定義して if ( (fpIN = fopen("matrix.txt", "r" )) != NULL ){ if ( fgets(a2,sizeof(a2),fpIN) != NULL ){ } fclose( fpIN ); } for(i=0;i<n;i++){ for(j=0;j<n;j++){ a[i][j]=atof(a2); } } というようなものです。 テキストファイルは、数字をカンマで区切ったり、スペースで区切ったりと いろいろ試してみたのですが、やはり書き込んだ値とは異なるものが表示されます・・・ 最終的には、ひとつのテキストファイルに 複数の行列のための値を書き込んでおき、それを読み込んで計算させるということをしたいのです・・・ どなたか、正しく値が読み込まれない原因が分かりましたら、教えていただければと思います。 お手数をおかけしてすみませんが、よろしくお願いします。

  • VB テキストボックスの数字を自動計算させたい

    VBの講義を始めて2週間の初心者です。課題で作らないといけないプログラムがあるのですが手詰まりました。助言をお願いします。 プログラムはアメフトの試合結果を計算するものです。 全てテキストボックスを5個用意し、うち4個に1回から4回までの得点を入力し、残り1個に合計点を表示させるものです。 ボタンはありません。テキストボックスのみです。もしかしたら、合計点表示はラベルかもしれませんがなんだか判別がつきません。 また、テキストボックスに数字を入力したら自動的に計算するように、と条件が出ています。 4つのテキストボックスに数字を入力し、1つのテキストボックスまたはラベルに合計を表示させるコードってどう書けばいいのでしょうか・・・?本やサイトを参照したりもしましたがどうもうまくいかず頭に疑問符が浮かぶだけです。 授業自体はまだ始まって間もなく、ハローワールド的な導入部分、主なコントロールの紹介、変数の宣言しかやっていないのでIFなど複雑なものコードは書かないとは思いますが・・・。

  • PHPで日付の入力内容をチェックするには

    PHP初心者です。 テキストボックスに入力された発売日をチェックしてMySQLのDATATIME形式の発売日のフィールドにデータを突っ込むプログラムを組んでいるのですが 1、DATATIMEは4-2-2の形式なので、この通りかチェックしたい 2、発売日が不明な場合は空欄でもOKにしたい 3、入力はされているが4-2-2の形式以外の場合はエラーメッセージを出したい 4、入力された数値が4-2-2の形式でも存在しない日付の場合もエラーメッセージを出したい 以上のことを踏まえて if ($_POST['sale'] == '') { $error['sale'] = 'black'; <input type="text" name="sale" size="10" id="sale"> <?php $sale = mb_convert_kana($_REQUEST['sale'], 'a', 'UTF-8'); if (preg_match("/^\d{4}\-\d{2}\-\d{2}$/", $sale)) { echo htmlspecialchars($_POST['sale'], ENT_QUOTES, 'UTF-8'); } else if ($error['sale'] == 'blank') { echo htmlspecialchars($_POST['sale'], ENT_QUOTES, 'UTF-8'); } ?> 1、2までは何となくできたのですが3のエラーメッセージを出す場合CSSで文字の色を変えたいので <p class="error">* 発売日は 空欄 もしくは 2010-01-01 の形式でご記入ください</p> HTMLでこれを入れる場合、どのようにプログラムを組めばよいのでしょうか? 単純に考えれば if ( ) { } else if ( ) { } else { } みたいな感じになると思うのですがそうするとPHPの中にHTMLを記述しないといけなくなります。 自分はまだPHPの中にHTMLを記述する方法は知りません。 また、4の機能も付ける場合どのようにプログラムを組めばよいかわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数テキストファイルを読み込み、複数テキストファイルの出力

    質問は100個のテキストファイル(それぞれ10個のデータを含む)を読み込み、それぞれのテキストファイルから5個ずつデータを抽出し、200個のテキストファイルとして出力するというプログラムについての質問です。 以下が僕の作ったファイル出力部分のプログラムです。 /************/ void ecg_rr(fp,data_max) FILE *fp; { int b,i=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i=0;i<100;i++) sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0]); fprintf(fp,"%8.8f\n",data[0][2]); fprintf(fp,"%8.8f\n",data[0][4]); fprintf(fp,"%8.8f\n",data[0][6]); fclose(fp); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1]); fprintf(fp,"%8.8f\n",data[0][3]); fprintf(fp,"%8.8f\n",data[0][5]); fprintf(fp,"%8.8f\n",data[0][9]); fclose(fp); } 複数ファイルの読み込み方がわからず、自分のプログラムだと1つのテキストファイルしか読み込めないので、16_4.batを作り、その中身を 16_4 読み込むテキストファイル名1.txt ss[1] 16_4 読み込むテキストファイル名1.txt sk[1] 16_4 読み込むテキストファイル名2.txt ss[2] 16_4 読み込むテキストファイル名2.txt sk[2] ・・・ とやったのですが、うまくいきませんでした。 どうすればよいのでしょうか。

専門家に質問してみよう