- ベストアンサー
条件付きソートができるエディタまたはプログラム
こんにちは。 ファイルの中身を 記号(。、<>「」など) A-Z a-z あ-ん(「は」のように濁音と半濁音のある音は、はばぱの順) ア-ン(↑と同様) 漢字(あ-ん同様) に並べ替えたいのですが、このように条件がつけられるエディタ(無料)は無いでしょうか? またはプログラム(CまたはPerl)で実装できないでしょうか? 教えていただけると助かります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
並べ替える単位は1行ごとの文字コードの大小順であって お望みの順序とは違うかもですが、 例えば DOS プロンプトにある SORT でソートできます。 コマンドプロンプト または DOS画面で TYPE INFILE.TXT | SORT > OUTFILE.TXT または SORT <INFILE.TXT >OUTFILE.TXT 後者の方が実行時間は早いみたいです。
その他の回答 (3)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>Perl自体あまり得意ではないので Perlはそれに反して、この手の処理はとても得意です。 データ自体が分からないとヒントだけになります。 1GBとなると、そこそこのサイズになりますからすべてを読み込ませて処理するよりは一行ずつ処理するほうが楽でしょう。 先日回答した「pealを用いたcsvファイルの抽出( http://okwave.jp/qa/q8885727.html )」がヒントになるでしょう。 open(IN,in.txt); でファイルハンドルを指定して while(<IN>){ 正規表現をもちいて、配列の配列に格納 } で、 ( (インターネット,TV,2340,行番号) (インターネット2,DVD,1450,行番号) (インターネット,CD,2560,行番号) ) できた配列の配列をsort函数を使ってソートして、最終的に行番号だけのリストを作ります。 @LIST = (256,124,5,9845・・) そしたら、 while(<@LIST>){ while(@IN){ print OUUT; } } とかで書き出す。 open(SORTED,in.txt);
お礼
回答ありがとうございます。 私のやりたかった並べ替えは文字コード順だったようなので、プログラムを作らなくても一応できるということが分かりましたが、他にも文字列を扱うことが多々あるので、Perlの勉強をしなくてはなと改めて思いました。 ありがとうございました。
- neKo_deux
- ベストアンサー率44% (5541/12319)
エディタは文章を書いたり編集したりするプログラムですから、 > ~に並べ替えたいのですが、 なんて事をすれば、まともな【文章】になりません。 まともなエディタならそういう機能は持たないでしょう。 例えば、質問文を並べ替えると、 -----ここから----- A-Z a-z あ-ん(「は」のように濁音と半濁音のある音は、はばぱの順) ア-ン(↑と同様) こんにちは。 に並べ替えたいのですが、このように条件がつけられるエディタ(無料)は無いでしょうか? ファイルの中身を またはプログラム(CまたはPerl)で実装できないでしょうか? よろしくお願いします。 漢字(あ-ん同様) 記号(。、<>「」など) 教えていただけると助かります。 -----ここまで----- とか。 プログラムも作れるでしょうが、Excelなんかにコピペして並べ替えるのが簡単だと思います。
補足
回答ありがとうございます。 確かに言われてみればそうですよね・・・。 Excelでもできるのですね。 ただ、並び替えたいもののデータ量がかなり大きい(1G近くある)ことと、下の方の補足でも書いたように、1行の中に半角スペースやtab文字も入っているのですが、Excelでも大丈夫でしょうか?
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>ファイルの中身を どのようなフォーマットのファイルか分かりませんが、Perlなどテキスト処理を得意とする言語で良いです。
補足
ファイルの中身は、例えばですが インターネット+インターネット+2(半角スペース)TV+テレビ+2,-3.2929 のように、数字や半角スペース、(上の例にはないですが)tab文字のあるデータです。 Perl自体あまり得意ではないので実装方法も教えて頂けると非常に助かります。
お礼
回答ありがとうございます。 >並べ替える単位は1行ごとの文字コードの大小順であって >お望みの順序とは違うかもですが、 >例えば DOS プロンプトにある SORT でソートできます。 SORTでやったら、私のやりたかった並び替えを実現することができました! どうやら文字コード順でよかったみたいです。 ありがとうございました。