• ベストアンサー

ちょっと特殊なソート

ソートプログラムを作りたいんですが、ちょっと特殊なんです。 入力データとして 5 2 4 8 1 4 みたいに、スペースで区切られた数字および文字列があります。それをスペースまでを一区切りとしてソートしていきたいのです。上の例だとこんな感じ。 2 4 5 1 4 8 どういう風に設計するのがいいと思いますか? シェルスクリプトに埋め込みたいので、できるだけコードを短くしたいのですが… 教えてください。

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

パラグラフモードで読み取って、それ単位にソートするとか。こんな感じ: % cat a.txt 5 2 4 8 1 4 % perl -000 -pe '$_ = join( "\n",sort split)."\n\n"' < a.txt 2 4 5 1 4 8 % 末尾の処理がいい加減ですが。 FreeBSD 5.2 + Perl v5.8.2で試してます。 起動時引数-Oの詳細は、Perl添付ドキュメントperlrunをどうぞ。

foetida
質問者

お礼

ご回答ありがとうございます。 素直に感動しました。 わからない部分を調べて勉強させていただきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • azicyan
  • ベストアンサー率21% (368/1747)
回答No.1

Pealはわからないのですが、 数字を2次元配列にして、 A(x,y)のように用意して A(0,0)="5" A(0,1)="2" A(0,2)="4" A(0,3)=" " で、xをインクリメントして A(1,0)=8 ..... と格納していき、 xが0、1,2、…のときにそれぞれ分けて ソートする… いかがでしょうか

foetida
質問者

お礼

ご回答ありがとうございます。 結局一次元配列に格納して、スペースを検出するたびに出力するように作りました。 参考になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ソートについて

    オラクルのデータベースで半角英数字、半角スペース、 半角記号が混ざった文字列に定義された列があって、 その列をうまくソートする方法はありますか? (例) 桁数は3桁、半角スペースは[_]アンダースコアであらわすとして 05 1_ a_ 18 2_ 1a ↓ 1_ 1a 2_ 05 18 a_ よろしくおねがいします。

  • エクセルでのソートがうまくいきません

    エクセル2000を使っています。 VLOOKUP関数を利用して見積書を作っていますが、時たま上手くいかない事があります。 見積書は、 見積書のページに A列:数字4桁の商品コード B列:商品名 C列:単価 (例:1001 アイスクリーム 1,500) 商品コードのページも全く同じで、A列でソートしてあります。 VLOOKUPを使って、見積書のA列の4桁の数字に対応した商品コードのB列C列からデータを持ってくるようにして、見積もり書のB列とC列をうめる・・・という簡単な仕組みです。 ところが、なぜかB列とC列にうまくデータを持ってこられない行がいくつか出てくる事があります。(#N/Aと表示される) ちなみに、見積書も商品コードもA列のセルは文字列に設定しています。 また、変換できなかったA列の数字を上書きして入力すると半分くらいはB列C列が#N/Aから本来のデータになるのですが、相変わらず変化なしの場合もあります。 そのような場合は、見積書のA列に商品コードのA列をコピーしたものを貼り付けて上書きするとちゃんと表示できるようになります。 この場合の見積書は、過去に作ったいろんな店舗への見積書を行追加して新たに作った「年間の見積書の全て」といった物なので、時によってA列のセルの性格が違っている場合があるかも・・・という訳で改めてA列を文字列に設定し直しています。 が、これをやってもA列での並べ替えもうまく昇順にならない場合がありますので、やはりセルによっては統一されていない部分があるのかと調べてみましたが全て同じく文字列になっています。 どうにも訳が判りません。 長い文章で申し訳ありませんが、御判りの方がおいででしたら後教授ください。

  • 数字文字列のソート方法

    文字列に数字を含むデータのソートを行うプログラムを C言語で作成したいのですが、どうすれば良いでしょうか? 具体的に言うと、a12、a2、a10という順序で並んでいる データを昇順にソートした場合にa10、a12,a2というように ソートせず、ちゃんとa2,a10,a12とソートされるように したいのですが、簡単にできるものでしょうか? 質問がわかりにくいかもしれないのですが、どうかご回答をお願いします。

  • ソートの順番を変える処理

    現在、C言語の勉強をしています。 そこで、ソートについて皆さんのお知恵を拝借させてください。 文字コードで大小を比較してソートを行うにあたり、文字コードの大小とは違う方法でソートしたい場合はどのように行えば良いでしょうか? 例えばASCIIコードで 「*」は42(0x2a)、 「#」は35(0x23)、 数字の「0」は48(0x30)なので、 1:*111 2:#222 3:333 というデータがあった場合、文字コード順だと 1:#222 2:*111 3:333 という順になってしまいます。 それを 1:*111 2:#222 3:333 という順にソートするにはどうしたら良いのでしょうか? 実装方法が全く分からず、同じような質問が無いか探してみたんですが、見当たらなくて困っています・・・。 有識者の方、どうかよろしくお願いいたします。 また、以上のデータはASCIIですが、他にもSJISの文字(ひらがなや全角英数)を使用するデータのソートも同様の処理を行いたいと思っております。もし可能でしたら、少しだけでもアドバイスをお願いいたします。

  • バブル・ソート、クイック・ソート

    N個(N=4,5,6)のデータが全て等しいデータ列(例えばN個の数字全部が1のとき)をバブルソートで並び替えたとき、データの交換回数は何回か。また、同じデータ列をクイックソートで並び替えたときはどうか。 という問題があるのですが、どう比較するのかがわかりません。詳しい方、説明よろしくお願いします。

  • TextBoxに入力された文字列のソート

    TextBoxに入力された文字列のソート TextBoxに入力された文字列のソート 開発環境:Visual Web Developer 2008 express 言語:Visual Basic TextBoxを縦5行横3列に並べた表形式の入力フォームがあり、1列目のTextBox(番号…1,4、7、10、13)に入力された文字列(数値)を基準に、昇順にソートし、行ごと入れ替えるプログラムを作りたいのですが、TextBoxを利用したソートの参考になるものが見つからず息詰まっています。どなたかサンプルや参考になるサイトがあれば、教えてください。 ###入力フォーム### 1  あああ あああ 3  ううう ううう 2  いいい いいい 5  おおお おおお 4  えええ えええ ###実際に出したい結果### 1  あああ あああ 2  いいい いいい 3  ううう ううう 4  えええ えええ 5  おおお おおお

  • 連想配列のソート

    次のような連想配列があります。 $buff[0][0]=1; $buff[0][1]=567; $buff[0][2]=134; $buff[0][3]="文字列"; $buff[1][0]=2; $buff[1][1]=246; $buff[1][2]=537; $buff[1][3]="文字列"; $buff[2][0]=3; $buff[2][1]=897; $buff[2][2]=334; $buff[2][3]="文字列"; ~ 要するに キー,数字,数字,文字列 が並んでいて、キーと値を保持したまま真ん中の数字二つを使ってソートしたいのですが、どのようにすればいいでしょうか。 asort($buff[1], SORT_NUMERIC); reset ($buff[2]); asort($buff[2], SORT_NUMERIC); reset ($buff[2]); のように試してみたのですが、まったく並びは変わりませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • エクセルの複数項目をソートするには?

    すみませんが教えて頂けませんか 現在勤めている会社のデータなのですが、 セルのA列(顧客番号:数字のみ)と B列(顧客名:漢字仮名まじり)にあるデータを元として I列とJ列にある項目をA列とB列と全く同じ並びに ソートさせてそれに付随している売り上げの数字が 入力されているK列とL列とM列も I列とJ列に連動して一緒にソートする方法は無いでしょうか? どうぞ宜しくお願いします

  • Excelの数値でのソートについて

    1.2.3.4.5.6.7.8.9.10.11........100.101.102 というふうに番号が入力されている列があるのですが、これを上のような順番でソートすることはできませんか? 普通にソートすると1.10.100.1000.1001.1002.1003となってしまいます。

  • Rubyで配列をソートする

    15(tab)5634(改行) 24(tab)4446(改行) 24(tab)8357(改行) 24(tab)3287(改行) 56(tab)5465(改行) 56(tab)1324(改行) 56(tab)7544(改行) 上記のように1行にtabで区切られた2つの数値が並んでいるテキストファイルがあります。 このファイルを、Rubyを使って1列目が同じ数字の行ごとにソートしたいのですが、できなくて困っています。 上の例でしたら、1列目が24の3行を2列目の数値をキーとしてソート、1列目が56の3行を2列目の数値をキーとしてソートするということです。 一行ずつ読み込んで、array = line.split(/\t/)でタブでくぎって配列に格納するスクリプトを書いていたのですが、どうしてもできないので、力を貸していただけないでしょうか。 よろしくお願いします。