• ベストアンサー

ファイル入出力時の、異なる変数型の扱い

実数型、整数型、文字型が入り組んだファイルがあったとします。 例えば、 1 0.01 kok 2 . 45 . 0.254 lp 6 12.54 . このとき、このファイルを読み込んで、 第2列(縦列)のある値が実数ならvectorに格納し、 そうでないなら、何もしないというようなプログラムを 作りたいと思っています。 どのようにすればよいでしょうか。 ただし、各列(縦列)は、文字型、整数型、実数型のどれが入っているかは 分かりませんが、何バイトかは分かっているとします。

noname#108554
noname#108554

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

  • ベストアンサー
  • rentahero
  • ベストアンサー率53% (182/342)
回答No.1

1行fgets(3)で読み込む。 strtok(3)で切り分けて2列目を(数値でも)文字列として認識 実数ということは小数点があるということだから、 小数点を探す 0個だったら、なにもしない 1個だったら、実数とみなしてatof(3)でdoubleに変換 2個以上あったら、文字列とみなしてなにもしない という処理でやればいいでしょう。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

正確な仕様がいまいち分かりにくいのですが... 指数表現はどのように扱うのでしょう?C言語と同じだとした場合、1.23e2は整数ですか?実数ですか? また、longに収まらない整数は実数扱いですか?それでも整数ですか? # vectorを使うということはC++なので、long long型はないですよね。 あと、long double型に収まらない実数はどう扱いますか? 文字列型はstd::stringに格納ということでいいですね?

関連するQ&A

  • バイナリファイルの読込み(小数の扱いについて)

    お世話になっています。 今、バイナリファイル(BSQフォーマット)を読み込むプログラムをC言語で書こうとしています。バイナリファイルの内容は数字(実数)の配列です。 そのバイナリファイルは、1数字につき2バイトしかなく、浮動小数点(float4バイトとdouble8バイト)などが使えませんでした。 なので、固定小数点なのかと思い、1バイトずつcharで読み込んだところ整数部分だけうまく読み込めました。しかし小数部分がうまくいきませんでした。 バイナリエディタで見たところ以下のようになっていました。 例:C2 FF(or 00) (この値が-62になることは分かっています。) しかし、上記の方法で読み込んだ結果は-62 -1でした。 そこで質問なのですが、 (1)2バイトの実数を1バイトで区切って整数と小数に分けて行うことなどあるのでしょうか? (2)上記の方法で行った場合、FFが-1になり、00も-1になってしまいます。本来なら小数部分のFFも00も値は0にならなければいけないのですが・・・。これは、どのように解決すればいいのでしょうか? 部分的に間違っている。根本的に間違っている。などなど アドバイスよろしくお願いします。

  • 変数のタイプ

    Active Basicを使ってプログラムを書いています。 そのときに、変数というものがいまいち理解できなく、感覚で適当にしてしまいます。 たとえば、ファイルをを開くのダイアログボックスでファイルパスを取得するとき、Active Basicの本では、その文字列を格納するのに、 『Byte』を使っていました。 Dim buffer[MAX_PATH-1] As Byte といった風です。 しかし、本には、 バイト数:1 値の範囲:0~255 と書いてあります。 文字列を取得する場合はStringを使うのではないでしょうか? Byteでも、文字列を格納できるのでしょうか? 他にも、LongやDWordやIntegerやSingle、Dobleといったものがありますが、どう使い分けていいのかがわかりません。 すみませんが、分かる方、いらっしゃいましたらご教授願えませんでしょうか?

  • テキストファイル

    ファイル処理でのテキストファイルについて質問があります。 例えば、 November 26 sunday 今日、算数の宿題をした。 5x5=25 2.5x3=7.5 簡単だった。 とても楽しい1日だった。 というテキストファイルがあるとする。 整数、実数、英字(1バイト)、漢字(2バイト)などありますが、 それぞれ、char型、int型、double型として扱われているんでしょうか? それとも、すべて文字列として扱われているんでしょうか? 教えてください。

  • ファイル出力の中でfor文を使う

    現在C++でhtmlファイルを出力するプログラムを作っています。 その中でvector<char>型で格納してある文字列を使いたいのですが、 ファイル出力の中でfor文を使うことってできますか? 一番良いのはvector<char>型のものをstring型に変換できれば楽だと思うのですが・・・。(こちらも方法がありましたら教えてください。) あればでよろしいのですが、簡単なサンプルプログラムなんかも付属していただけたらありがたいです。 環境はVisualStudio.NET2003です。

  • ファイルを読み込んで変数へ

    VB初心者です。 ファイルの文字列を読み込んで、変数に格納し、SQL文のテーブル名に指定したいのですが、どうすればよいのでしょうか? テキストから文字列を取得するところまではできたのですが、変数にもって、SQL文に組み込むことができません。実行すると「テーブル名が無効です。」とエラーになります。 どうか、皆様ご教授ください。

  • 配列について

    こんにちは。 int p[1000]という整数型の配列を作成しました。 例えば、 p[0] = 1; p[1] = 2; p[2] = 3; ・ ・ ・ p[99] = 100; を格納し、配列の長さ?を調べる際、 unsigned int len = 0; while(p[len]!='\0') len++; とすることで調べることが可能でしょうか?p[100]番以降に0が格納されている場合それがナル文字となるのでしょうか? また、char c[1000]と文字列型の配列を作成し、文字列の数値を格納していく場合、一桁であれば要素1個(1Byte?)で格納できますが、二桁以上であれば要素2個以上(2Byte以上←あっていますでしょうか)必要です。 c[0]='1' c[1]='2' c[2]='3' c[3]='4' ・ ・ ・ c[9]='1' c[10]='0' c[11]='1' c[12]='1' ・ ・ ・ ここで問題なのですが、文字列10と文字列11の判別はできないのでしょうか? 110111が連続している場合も値110と値111と判別できないのでしょうか? 値を格納する場合は、整数型のint c[1000]を用意するという事でしょうか? よろしくお願いします。

  • ファイル入出力

    ファイル入出力の問題で、文字列を読み込んで、読み込んだ文字列中のアルファベットの小文字を大文字に変換する。というものがありました。どうやればいいのでしょうか?

  • 「000-000」のような値を扱いたい時の型。

    例えば整数「123」などでしたら、int型を使って値を格納すればいいと思うのですが、例えば「123-999」などを扱いたい場合は、どんな型を使うべきでしょうか?やはり文字列型になってしまうでしょうか? 数字以外には「-(あるいは_)」しか使いません。 それらの値をデータベース(MySQL)に入れる予定です。 それらの値はデータベースのID(キー)に使います。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 他のファイルの変数参照

    a.javaというファイルで配列array[]に整数を格納しました。別のb.javaで その整数が格納された変数array[]を使うにはどうすればいいでしょうか?

  • ファイル入出力について

    姓名判断のプログラムを作ろうと思い、次の様な漢字ファイルをメモ帳で作ったのですが、 花,7[リターン] 木,4[リターン] 絵,12[リターン] ・・・ このファイルから花や木や絵の部分をchar型配列に7,4,12などの画数の部分をint型配列に入れたいのですが、どのようにしたらよいのかわかりません。fscanfを使おうとしても1行分文字列として認識されてしまいます。

専門家に質問してみよう