• 締切済み

ファイルのデータの並べ替えについて

data.txtに入力されたA 100 B 300 C 200 D 300を 数値の大きい順に並べて、data2.txtに出力するプログラムを作成したいのですが何をすればいいのかわかりません。 一応、data.txtファイルはプログラムできました。 ヒントだけでもいいので教えてください。 あと、同点の場合はアルファベット順にしたいです。 よろしくご指導お願いします<(_ _)>

みんなの回答

  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.2

構造体を定義する。 typedef struct data {   char name;   int point; } Data; んで、Data型の比較を行う関数も作って (数値順で、同点だったらアルファベット順でってやつ) ライブラリ関数qsort()を使う。

gurizuri4649
質問者

お礼

返答ありがとうございます。 構造体はまだ勉強中なのでちょっと難しいです。 あと、ライブラリ関数もまだ勉強していません。

  • 12m24
  • ベストアンサー率23% (193/817)
回答No.1

 名前がこのような一文字の場合は、名前をname、点数をpointとして、読み込むときに「fscanf("%c %d",&name,&point);」とすると、1行ずつ読んでくれます。これを入れたい配列などに読み替えて、繰り返していけばいいかと思います。

gurizuri4649
質問者

お礼

返答ありがとうございます。やってみます!

関連するQ&A

  • C++でファイル出力

    C++の初心者です。 あるデータをプログラムで計算し、それをファイル出力したいと考えております。 その際、10秒ごとに名前を変えてファイルを新規作成し出力ということはできるのでしょうか? たとえば、 int main(){ for(int i =0;i <10000; i++){ //cout << i << '\n'; /* ここでファイル出力をしたい */ /* 0から順に計算して改行し、出力 */ /* 最初は"hoge1.txt"に出力後、10秒ごとに"hoge2.txt"、 "hoge3..txt"と出力したい*/ /* hoge5.txtになったら終了 */ } } という感じです。 どなたか教えていただけませんでしょうか?

  • FORTRAN ファイルの入出力の方法がわかりません

    メインプログラムを main.dat 入力するファイルを input.txt とします。 input.txtファイル内は A 12 23 B 49 93 C 66 25 ・ ・ ・ と続いてるとします。(数字は同じ数ずつ並んでて、その間にアルファベットがある) この時、2行目~3行目(12と23)、5行目~6行目(49と93)、8行目~9行目(66,25)、・・・・、とそれぞれのアルファベットのグループの数字を読み込んで、別々の出力ファイルを作るにはどうすれば良いかわかりません。つまり ファイルA 12 23 ファイルB 49 93 ファイルC 66 25 ファイルD ・ ・ ・ とアルファベットのグループ毎にファイルを作りたいのです。 DO文だけでできるのか?また、IF文を使う必要があるのか?直接アクセス入力(ACCESS='DIRECT')を使うのか?初心者でかなり調べたんですがよくわかりません。教えて頂けると幸いです。よろしくお願いします。 また、もしよろしければ、グループCのみの数字(66、25)だけを読み込んで、出力する場合についても教えてくれるとありがたいです。 (基本的なOPEN、READ、WRITE文の使い方はわかっています。)

  • ファイル入出力について教えて下さい。

    ご覧いただきありがとうございます。 数値を入力して、数値を出力する方法を教えて頂きたいです。 ・   ・   ・ fp = fopen( "a.txt", "a" ); for( i = 16383; i >= 0; i-- ) { fprintf( fp, "%d", i ); } fclose( fp ); ・   ・   ・ data = (int *)malloc(32768); fp = fopen( "a.txt", "r" ); for( i = 0, i <= 16383; i++ ) { fscanf( fp, "%d", data+i ); } fclose( fp ); ・   ・ ・ 以上の記述で、入力はうまくいくのですが、出力の際に数値でなくなってしまいます。どうしてでしょうか? ご存じの方がおりましたら、ご回答よろしくお願いいたします。

  • エクセルの文字列並べ替えについて

    エクセルの文字列並べ替えについて エクセル2000です。 半角文字列の数字とアルファベットを通常のエクセルの機能で昇順で並べ替えた場合 012 013 111 1AA 1B1 211 222 22C 23A 2AB 2BC のように並ぶと思います。(ここでの数字は数値でなく、すべて文字列です) 数字→アルファベットの順番のようです。 これを「アルファベット」→「数字」の順番で並べ替える方法はないでしょうか? 以下のような順にです。 ユーザー定義のリストに基づいた並べ替えがあることは存じていますが、3桁だけでも英数混在だと36×36×36=46,656個のリストを登録しなければならないことになり、現実的と思えません。 目的は、ホストコンピュータから出力される紙のデータがなぜかこのような順で出てきて、それにエクセルで作成したデータをあわせる必要が出てきたためです。 012 013 1AA 1B1 111 2AB 2BC 211 22C 222 23A エクセルの一般機能でもVBAでもかまいません。ご教示いただけると幸いです。

  • C++のファイルに対する配列データの読み書き

    C++で配列c[0],c[1],....の値をファイルに出力すると、 1.2 3.2 5.1 8.2 -9.1 のようになると思います(この例は配列のサイズが5)。実際は100以上の配列にします。 プログラム的にはだいたい下のようになると思っています。 std::ofstream ofs( "test.txt" ); ofs << ここで並びの出力をするはず? << std::endl; 意味は、出力ファイルの定義とストリームによる書き出し?と改行だと思います。 並びの出力ですから、ループでよいのでしょうか。プログラム作法が分からないので教えて頂きたいのですが。データの区切りは空白で、できれば書く数値のフォーマットは揃えたいですが。 次に、読み込むときはどうなるでしょうか。 std::ifstream ifs( "test.txt" ); std::string str; ifs >> str; std::cout << str << std::endl; これだと読んだデータを画面表示して終わりです。配列に読み込む方法なのですが。 よろしくお願いします。

  • 4つのJavaファイルについての質問

    この4つのプログラムを実行するためのtera padへの入力表記(?)が分かりません、分かる方どうか教えてください!(1つだけでも嬉しいです!) (1.)コマンドラインから整数値を入力して、入力された数値が 10 かそれより大きいかを判断し、メッセージを表示します。   (入力された数値が 10 かそれより大きい場合は okメッセージを出力し、それ以外の場合はNGメッセージを出力します。)このプログラムを作成してください。 (2.)1から200までの数値の中の7の倍数を表示させるプログラムを作成してください。 (3.)1から100までの数値の総和を計算・表示するプログラムを作成してください。 (4)実行結果が 出力したいアスタリスク(*)の数を入力してください: 10 10を入力されました。 **********となるプログラムを作成してください。

  • C言語でファイルから読み込んだデータの処理

    こんにちは C言語についてかじった程度でほとんど初心者なので、どうぞよろしくお願いします。 テキストファイルからデータを読み込み、そのデータをもとに計算してその結果を違うファイルに出力する。 というプログラムを組みたいと思っています。 例えば、 1 2 3 4 5 … 400 401 …     440 : 1600 …    2000 というデータだとします。 4項目ごとのデータを(a,b,c,d)として、このデータを x=a+b y=a+c z=a+d といったように計算して、これを [x y z] [ …  :  … といったように出力したいんです。 この場合では [3 4 5] [11 12 13] … [  ]  : [ ]… [ ] となると思います。 ファイルの入出力だけならいろんなところで例題にもなっているので何とかなると思っていたのですが [ ] [ ] : といったように下につながるか [ ][ ][… といったようにすべて横につながってしまいます。 対応するように並べるにはどのようにすればいいのでしょうか。 うまく説明できず、非常にわかりにくい質問だとは思いますが、皆さんどうぞヒントだけでも与えてくれるとうれしいです。 よろしくお願いします。

  • C言語 入出力ファイルの読み書きとプリントアウト

    入力データ(番号、名前、年齢、住所)を入力データファイル「in.txt」から読み込み、番号順に並べ替えて、出力データファイル「out.csv」に書き出す&プリントアウトするプログラムを作りたいのですが、プログラムを実行する度にコンパイラからプリントアウトする方法(例えばプリンターをプログラム内で指定)を教えてください。回答お願いします

  • テキストデータの読み込みについて

    C言語のテキストデータの読み込みについてです。 C言語のプログラムについてです。 2444,1114,2807, 1984,2845,2086, 658.1,-1564.0,1239.7, -102.0,958.4,123.1, 12.7,6.0,82.7 2439,1110,2802, 1973,2865,2108, 658.8,-1563.7,1239.6, -102.0,957.1,121.9, 12.8,6.0,82.7 2441,1106,2806, 1967,2888,2124, 659.4,-1563.5,1239.5, -102.2,956.4,121.0, 12.8,6.1,82.8 2440,1109,2808, 1964,2896,2127, 660.0,-1563.3,1239.4, -102.7,956.2,120.7, 12.8,6.1,82.8 2441,1112,2807, 1981,2894,2120, 660.6,-1563.0,1239.4, -103.3,956.2,120.1, 12.8,6.1,82.8                                       ↑ 上の様なカンマとスペースで15個に区切られているtxtファイルがあるのですが、このtxtデータの10コ目と11コ目をを計算で使いたく、取り出したいと考えているのですがscanfを使いどのように取り出すことが出来るのか、また取り出したデータから数値を引くことを教えて頂きたいです。 つまり -102.0   958.4 -102.0   957.1 -102.2 と 956.4 -102.7   956.2 -103.3   956.2,             を取り出して計算に使いたいです。 そして1番上の数値だと、 -102.0と958.4 を読み込み、例えばそれぞれ100を引いた値を配列に入れたいです。 -102.0と958.4 → -202.0 と 858.4 のように取り出したいです。 教えて頂きたいです。お願いします。

  • perl ファイルのデータを編集したい

    初めまして、perl をやり初めたばかりです。作業は Linux 上で行ってます。 あるテキストファイル data.txt があります。 data.txt の中は、以下のようになっているとします。 100 200 300 400 500 600 これを読み込んで、例えば、 1 2 3 4 5 6 以上の様に各数字を百分の一にして出力したいと思ってます。 一応、色々と調べながらプログラムを書いてはみましたが 思う様に出力されません。以下そのプログラム。 #!/usr/bin/perl open(IN, "data.txt") or die ; @x = <IN>; close (IN); $ref_x = \@x; $n_data = @x; for ($i = 0; $i< $n_data; ++$i) { $$ref_x[$i] /= 100 ; print $x[$i], " "; } print"\n"; どなたか、perl にお詳しい方教えていただけないでしょうか? 宜しくお願い申し上げます。

専門家に質問してみよう