• 締切済み

C言語でファイルの中身をソートするコマンド

unixのsortのようなコマンドはC言語にあるのでしょうか。 配列のソートではなくてファイルに対してのコマンドです。 sortをsystem()で使用すれば良いのでしょうが、C言語のコマンドにあると聞きました。おそらくunix関連のC言語のコマンドだと思うのですが。

みんなの回答

  • bnosuke-x
  • ベストアンサー率39% (43/110)
回答No.5

>C言語のコマンドにあると聞きました。 これは、クイックソートのアルゴリズムを提供するqsort()と言う関数のことだと思います。 もちろんファイルの中身をソートしてはくれません。 これを利用するには、ポインタと関数へのポインタの知識が必要です。 ですが、K&Rに利用例が載っているので、それを参考にすればソートを行うプログラムは作れるでしょう。 注意点としては、「並べ替え対象のデータを受け取り、比較の結果を返す関数を自作し、その関数のポインタをqsort()へ渡す」というところがなかなかなじみのない概念だと思いますが、これもじっくりK&Rを読めばわかると思います。 極端な話、K&Rのサンプルをまねっこして作っても良いと思います。 ところでこれは標準のC言語の話で、具体的なコンパイラに用意されているライブラリにあるのであればもちろんそれを使うことができます。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★何かと思い違いをされているのでしょうか? >unixのsortのようなコマンドはC言語にあるのでしょうか。  ↑  C言語では既に回答がでていますね。  『コマンド』=『関数』という事なら存在しないです。  qsort() 関数を利用すれば配列を用いて出来ます。  他にも C++ 言語では STL(標準テンプレート・ライブラリ)で sort() がありますね。  http://www.geocities.jp/ky_webid/cpp/library/019.html  どちらにせよファイルを直接ソートする関数はありません。 >配列のソートではなくてファイルに対してのコマンドです。  ↑  配列という事は当然 qsort() などの関数を知っているという事ですよね。 >sortをsystem()で使用すれば良いのでしょうが、C言語のコマンドにあると聞きました。 >おそらくunix関連のC言語のコマンドだと思うのですが。  ↑  それに system() 関数で外部コマンドを呼び出せばファイルを直接ソートは  可能という事も知っているようですね。 補足要求: >C言語でファイルの中身をソートするコマンド  ↑  どちらで C 言語の関数からファイルを直接ソート出来ると聞いたのでしょうか?  何かと思い違いをされているような気がしますけど。  そもそもコマンドとは表現しないで『関数』と表現すべきと思います。  『関数』=『処理手順』=『コマンド』という感じなのでしょうけど。一応。 ・以上。どちらで聞いたのでしょうか?HP なら URL を載せて下さい。

  • maku_x
  • ベストアンサー率44% (164/371)
回答No.3

C言語では、ファイルに対して直接ソートを行う関数はありません。配列、構造体、文字列などに対してソートを行う qsort() と言う標準関数はありますので、No.1 様が書かれているように、(テキスト)ファイルを1行づつ配列に読み込ませて、qsort() で処理し、ソートできた配列をファイルに書き出せば、お望みのことは可能です。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

そもそもC言語には「コマンド」なるものは存在しません。 標準ライブラリにも、ファイルをソートする関数は存在しません。

回答No.1

意味がよく分かりませんが、C言語の関数の話でしょうか? ファイルの内容を1行ごと配列に読み込んでソートするしかないでしょう。 配列の内容を見てソートする関数を自作することになります。

関連するQ&A

  • sortコマンドについて

    いつもお世話になっております。 sortコマンドについて質問させて下さい。 現在UNIXコマンドのsortによってファイルをソートしようとしています。 ソート対象となるファイルは下記の通りです。 ファイルの種類:csvファイル ファイルサイズ:80MByte 1レコード長:48Byte レコード数:120万レコード レコード例: 2,1000 ,1,10C0,15,0000000100000000000000000000000000000000 2,1117 ,1,10B0,16,0000000300000000000000000000000100000000 ・ ・ ・ そこで下記のようなコマンドにてソートしています。 sort -t, -k 1,1 -k 2,2 -k 3,3 -k 4,4 < fileA.csv > fileB.csv すると「sort:0653-657ソート中に書込みエラーが発生しました。」と出力され中断してしまいます。 自分なりにsortコマンドについて調べてみたところ、 /usr/tmpディレクトリのファイルシステムがいっぱいになることでコマンドが失敗しているようです。 (一時的にそのディレクトリにソート内容を展開しているようでした) 社内にて/usr/tmpディレクトリのファイルシステムの拡張を求めたところ「できない」と言われてしまいました。 開発の最終段階でのボリュームテストを行ったときの障害でしたので、 処理を大幅に変更するような対処は出来ない状況です。 代替方法などありましたらご教示頂きたいと思います。 以上、宜しくお願い致します。

  • 【C言語】ファイルでのソート方法について

    ファイルの大量データ(構造体をバイナリで書き込んだ)をソートする時(構造体のメンバの1つをキーとして)に用いるソート法で高速にできるソート法はなんでしょうか? 選択法でやっているのですが遅いもので・・・・ 配列ではなくてファイルに対して高速なソート法をご教示いただきたく。 ファイル全てを読んでからソートしないと厳しいでしょうか? まだまだc言語初心者ですが、なにかアドバイスをよろしくお願い致します。

  • c言語 配列 や ソート datファイル読み込みについて

    初投稿でC言語初心者なのでよろしくお願いします。 課題でdatファイルから100万個の数字を読み込んで、ソートのタイムを競うのがでました。 ソートのアルゴリズム等は分かるのですが、100万個の数字を読み込むのがわかりません。 datファイルには、縦にずらっと数字が並べられていてどこを区切り文字としてとりだすのとか。 int配列も100万個も格納できないので3次元配列つかうのかなと思ってみたりしてます。 どうやって格納すればソートで使いやすいかご教授お願いいたします。

  • cでunixコマンドってどう使うんですか?

    c言語でプログラムを書いているのですが、 ファイルを連結するためにunixコマンドのcutコマンドを使用したいんですが、どのようにしたら使用できますか。どうかご教授ください。

  • Sortコマンドメモリーオーバー

    sortコマンドで2GBのファイルをソートしよとしたところメモリオーバーのため失敗しました。 sortコマンドの最大メモリーは5GBを指定しています。(sort -S 5000000) そこでこれを解決するために幾つか質問があります。 1. -Sで最大メモリを指定しない場合の最大メモリはいくらになるのでしょうか? 2. Unixのsortコマンドは巨大ファイルをソートするために用途として使用するのに向いているのでしょうか?(使用することはあるのでしょうか?) 3. 解決方法がありましたら宜しくお願いいたいます。 4. 代替案がありましたら宣しくお願い致します。 (メモリーはなるべく消費しない方法) 宜しくお願い致します。

  • UNIXのソートコマンドについて

    はじめまして、UNIXのsortコマンドについて質問です。 CSVファイルをソートする際、1行目がタイトル行で2行目以降をソートしたいのですがよい方法をご存知ですか? OSはSunOSでバージョンは3.8くらいだったと思います。 よろしくお願いします。

  • C言語で書き込んだファイルの重複行の削除と行の並び変えるプログラミング

    C言語で書き込んだファイルの重複行の削除と行の並び変えるプログラミング ファイル名が 0.txt というC言語で書き込んだテキストファイルがあり その中身は以下のようなものとします。 111 000 222 555 000 444 222 000 これらを行ごとに見て重複行を削除し 更に値の小さな順に並び変えたい、つまりファイル内を 000 111 222 444 555 となるようなプログラミングを考えているのですが 調べても分からず悩んでいます。 c言語のプログラム内に UNIXコマンドを扱う方法を考えているのですが c言語内でUNIXコマンドを併用するためのsystem()関数 や 重複行を削除する uniq というUNIXコマンドを どのようにプログラム内に挿入すればいいのでしょうか? ご回答、よろしくお願いいたします。 ちなみに以下のプログラムは system関数が理解できない私の作成失敗したものです。 #include <stdio.h> #include <stdlib.h> int main(void) { system("uniq 0.txt"); }

  • c言語の実行が分かりません

    C言語のプログラムを実行させる方法が分かりません。 unixでC言語を以下の手順で学習しています。 1 emacs上でファイル名.cというソースファイルを作成。 2 xterm上で gcc ファイル名.c と入力 その後xterm上で後一つコマンドを入力すればいいのですが、そのコマンドを忘れてしまいました。教えていただければ、ありがたいです。

  • C言語のCSV形式からのソート

    C言語初心者です。 C言語でCSV形式のテキストファイルを読み込み そのファイルの内容(数値)を昇順にソートして表示するプログラムを作りたいのですが中々上手く行きません・・・。 調べても分からず困っています。 どなたか教えていただけませんか?

  • c言語でのDOM使用法

    xmlファイルを読込み、その内容に応じて、systemコマンドによりバッチファイルを実行するというc言語のアプリを作りたいのですが、 c言語でのdom使用法が載っている参考書をどなたか知りませんか? どうか、教えてください。 又は、java等でsystemコマンドのようなものはあるのでしょうか?

専門家に質問してみよう