![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.4ベストアンサー
- 回答日時:
>C言語でCSV形式のテキストファイルを読み込み
>そのファイルの内容(数値)を昇順にソートして表示するプログラムを作りたいのですが中々上手く行きません・・・。
>調べても分からず困っています。
「初心者」でしたら、「上手く行きません」のは当たり前で、困ることではないかと。
「もう少し」調べたらきっと解決しますよ。
ちなみに、「昇順」とは、「小さい順」のことです。
>21,10,8,6,5,1 の様にしたいです。
これは「降順」といいます。
++++++++++++++++++++++++++++++++++++++
>プログラムはファイルを読み込んで一行そのまま表示してしまう状況です・・・。
テキストファイルの一行が、1,10,5,6,8,21 の場合、21 は「にじゅういち」という数値ではなく、「に・いち」という「文字列」であることは、(文字列用のフォーマット指定子を用いて)「表示」できたことから、お判りと思います。
http://www.k-cube.co.jp/wakaba/server/format.html
ここから、読込時、または「文字列」として読込後、
・6ケに切り分ける。
・6ケの「数値」とする(◆)。
必要があります。
★まずこれをクリアしては如何でしょう。
方法は色々あります。一例を下に示します(BorlandC++5.5.1)。
http://www.bohyoh.com/CandCPP/C/Library/index.html
蛇足(◆)
最終段階の「ソート」に関し、文字列のままでの大小比較関数も、標準ライブラリ関数に用意されています。
しかし、先頭から順に比較していくため、"5" と "10" では、「 "5" が大きい」となり今回の「ソート」には使えません。
なお、「ソート」については、意外と簡単?に解決できると思います。
考え方として、
テーブルに、通し番号の付いた6ケのコップが一列に並んでいます。
6ケのコップには、1,10,5,6,8,21 CC の水が入っているとします。
(個々のコップのテーブル上に置いた状態での位置は変えられません)
これを 21,10,8,6,5,1 CC のコップ状態にするには、
・空のコップ1つ(A)を用意します。
・1番量の多いコップ(B)を6ケの中から「選び出し」、その水をAに待避します。
・先頭のコップ(C)の水を、空になったBに移します。
・空になった先頭のCに、Aの水を移します。
これで、1番のみ(先頭)が確定しました。
順次、5番まで確定すれば、6ケ全てが確定します。
なお、コップの通し番号を記憶し、出力時にその順番で、という方法もあります。
プログラムでは、コップを「配列」として実現します。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main( void )
{
int iVal[ 10 ]; // 「配列」
int nn = 0, i;
char cBuf[ 256 ] = "1,10,5,6,8,21\n"; // ファイル1行模倣
char *p, *cTokn;
// ファイル1行入力
p = cBuf;
while( NULL != ( cTokn = strtok( p, ",\n" ) ) ){ // 切り分け
iVal[ nn++ ] = atoi( cTokn ); // 数値化
p = 0x00;
}
for( i = 0; i < nn; i++ ) printf( "%2d\n", iVal[ i ] );
// 自作ソート関数呼び出し
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
昇順の説明が間違っているとは予想外でした。
C言語以前の問題で恥ずかしいです・・・。
丁寧で分かりやすい解説ありがとうございます!
まずは6個の数値にする必要があるのですね。
教えていただいたリンクとソースを基に自分なりに頑張ってみたいと思います。
また分からないことがあれば質問させてもらうかもしれませんが、その時はよろしくお願いします。
本当にありがとうございました。
No.3
- 回答日時:
>プログラムはファイルを読み込んで一行そのまま表示してしまう状況です・・・。
>ここからこれをどうしたらいいのか分かりません。
まず、こういった場合はソースを開示してください。
どこが悪くて、何が足りないのか質問文だけでは判断できませんよ。
この回答への補足
正直動く部分はWEBページ上にあるC言語の解説サイトでサンプルとして
紹介されているテキストファイルの読み込みだけなんです。
ですのでソースを載せるか迷ったのですが止めました。
No.2
- 回答日時:
特定の 1行だけソートすればいいのか, それとも各行をそれぞれソートしたいのか, はたまたすべての行のデータをまとめてソートしたいのか, いずれでしょうか?
いずれにしても「読み込んだ行をカンマを区切りとして分解する」という作業が必要ですね. この処理は sscanf ではできないから, strtok か strtol とかを使うことになるでしょうか.
分解しちゃえばあとは普通にソートするだけ.
No.1
- 回答日時:
そのテキストファイルや「どのようにソートしたいのか」という簡単な例はありませんか?
また, 現在はどのようなプログラムになっていてどのように「うまくいかない」のでしょうか?
この回答への補足
>>Tacosanさん
テキストファイルの内容はCSV形式の整数で特に決まった値はありませんが
1,10,5,6,8,21 この様なイメージです。
ソートに関しては改行せずこの場合ですと
21,10,8,6,5,1 の様にしたいです。
プログラムはファイルを読み込んで一行そのまま表示してしまう状況です・・・。
ここからこれをどうしたらいいのか分かりません。
分からないことばかりで申し訳ないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# C言語について教えて欲しいです。 ファイルの中身をコピーするプログラムを作ってます aというファイル 7 2022/11/03 19:21
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- ソフトウェア フォルダ内の全サブフォルダ内のファイルパスをサブフォルダ毎に行を分けてリスト化したい 1 2022/11/13 10:27
- C言語・C++・C# 画像の画素値を変えるC言語のプログラムで指定された画像の中に白い三角形を右上に表示させるにはどのよう 3 2022/10/30 01:16
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- C言語・C++・C# C言語で移動平均のプログラムを作りたいのですが、数値をファイルから取ってきて計算をするプログラムはど 1 2022/09/29 01:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
Excelですべての組合せ(重複組...
-
ソート機能付きの成績表プログラム
-
C言語・要素除去
-
構造体配列のソート
-
Excel VBA テキストボックス内...
-
DataGridViewの昇順降順。
-
Fortran77で多次元配列を並び替...
-
C# DataGridView のヘッダーセ...
-
DataGridViewでのソート制御
-
ListViewについて
-
vbでDataTableの抽出コピー
-
VBA基本構文の作り方 2列の...
-
ListViewのソートについて
-
n番目に大きい数を求めるアル...
-
リスト構造のソートで悩んでま...
-
配列の中身を入れ替える方法を...
-
2次元配列を複数項目でソートし...
-
ファイル名「1.jpg ~10.jpg~...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C言語・要素除去
-
C# DataGridView のヘッダーセ...
-
Excelですべての組合せ(重複組...
-
VBA基本構文の作り方 2列の...
-
なぜ?counterintuitive
-
ファイル名「1.jpg ~10.jpg~...
-
リスト構造のソートで悩んでま...
-
配列の問題
-
C# DataTableの行をソートしてD...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
10個の整数を入力して小さい順...
-
文字列をソートする方法
-
excel VBA リストビューの行...
-
DataGridViewの複数列を連動し...
-
2次元配列を複数項目でソートし...
-
csvファイル内にてソートす...
-
n番目に大きい数を求めるアル...
おすすめ情報