2005年11月28日

並べ替えコマンド sort

久々の更新です。 (^^;

いや〜、実際の作業ってのは、頭に描いた通りには進まないものですね。本日、中間チェックだったんですが、見事に間に合いませんでした (^^;

後半、さらに追い上ていかないといけません。信用なんて元よりあると思っていませんので失いようはありませんが、迷惑だけはかけたくありませんからね。

まあ、そんな訳で、多少更新頻度は落ちると思いますが、続けていきますのでよろしくお願いいたします。

では、今回は以前予告した通り、並べ替えをしてくれるコマンドを紹介します。
詳細は、例によって sort /? を実行して確認してくださいね。

まず、チョッと試して見ましょう。 dir を実行してみてください。結果出力はファイル名、あるいはホルダー名の順番で並べられているのが判ると思います。では、dir | sort と入力したらどうでしょう? 違う結果が得られますよね・・・たぶん ^^;

sort 使ってバラバラじゃ意味ね〜じゃん!

いや・・・、dir コマンドなどは最適な表示をするように出来ていますので、通常このようには使いません (^^; でも、よ〜く見ると先頭の文字から見て、順番に並んでいませんか? 

ん〜〜、そー言われればそんな気が・・・

ってとこですよね。何の順番なのかよく判らないと思います。実はコレ、文字列の内部処理の数値の順番なんです。

コンピューターは、数値を理解しても文字そのものは理解できません。文字に割り当てられた数値を使って処理しています。日本語など、全角文字を使用する場合は少々複雑でマルチバイト文字列と呼ばれるものを扱うことになります。半角英数字は1バイト、全角文字は2バイトの数値が割り当てられますので、当然、全角文字の数値が大きいことになります。
このコードは、英数字は Ascii コード、日本語(全角文字)は Windows なら Shift-Jis が使われています。コード一覧はインターネット検索で見つかりますので、今回ココで掲載するのは控えさせて戴きます。

では、今度は dir | sort /+40 と入力してみましょう。また違う結果が得られますよね。これは 40 文字目から比較してねってことですから、その位置を確認してみましょう。この位置はファイル名の先頭になっていると思います。日本語が表示されている行が絡んで見にくいと思いますが、よ〜く確認してみてくださいね。


さて、何となく解かったところで本来の使用法ですが、データファイルからのリスト出力時や検索に利用することになると思います。

find "文字列" [ファイル名] | sort

とすれば、ファイルから指定文字列を含む行を順番に並べて表示します。ただし、数字順に並べるのは苦労しますよ。あくまでも文字列順ですから・・・(^^;  ほんと、コマンドプロンプトの弱いとこが目立ってきましたね。file1.txt file2.txt file10.txt file11.txt という名前の4個のファイルを作って保存し、その保存ホルダを表示してみてください。そんな感じになっちゃいます (^^;


検索に使用っていうのは、検索アルゴリズムにもよりますが、検索キーの順番に並んでいることが判っていれば、例えば全体のほぼ中央を調べれば結果がどっち側に存在するか判別できますよね。なので無駄な処理を省くことが出来るのです。手作業で見つけるときも同じですよね。目的のデータが何処の存在するハズなのかが判っているので見つけやすいのです。もし、存在しないデータだったら大変です。sort してあれば 「無い」 という判断はすぐに出来ますが、そうでなければ何度も見直すことになっちゃいますよね。この手の検索方法を2分検索といい、効率のよい方法なんですが・・・

ファイルのソートは、 sort [入力ファイル名] -o [結果出力ファイル名] という構文で可能です。

しかし、残念ながら2分検索は、コマンドプロンプトにはありません(弱い・・・(^^;)。 でも、データファイルを見やすい状態にしておく意味はあると思いますよ。

また、C言語 によるプログラムでこの方法による検索コマンドを自作することは極めて簡単です。以前にも紹介いたしましたが、Visual Studio 2005 は、是非入手しておいてくださいね。コマンドプロンプトの弱さを補う自動ネタツールを作成するのに使う予定でいますからね。



応援ポチ  お願いしま〜す。

posted by Woody at 01:37 | 静岡 ☀ | Comment(0) | TrackBack(0) | コマンドプロンプト
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのTrackBack URL
http://blog.seesaa.jp/tb/9896984
※特に許可した場合を除き、一方的な TrackBack は
  SPAM として削除いたします。ご了承ください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。