人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ウィンドウスで、ユニコード(UTF16)のファイルがあります。
このファイルをソートしたいのですが、良い方法がありましたら教えてください。

※SORTコマンドではうまくできませんでした。

●質問者: Vacuum
●カテゴリ:コンピュータ インターネット
✍キーワード:ウィンドウ コマンド ソート ファイル ユニコード
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● zzz_1980
●10ポイント

まず sort が windows のものかどうか確認を。

そのうえで、

||>

sort -L C <input.txt >output.txt

||<

で余計なコード変換は止められます。

http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/sort.s...

◎質問者からの返答

C:\TEMP>SORT -L C <LUInit.ini >SORT.OUT

入力ファイルが 2 度指定されました。

????


2 ● takerudayo
●10ポイント

エラーの原因はパラメータの書き方です。

パラメータの 「 -L 」の部分を「 /L 」と書き換えてください。

SORTコマンドのパラメータは - ではなく / 表記になります。


また、私のところでは

WinXPSP3日本語版環境で

「SORT input.txt > output.txt」

と特別な事をしなくても正常に処理できました。

(ただしinput.txtがUnicodeファイルなのに対して、output.txtはSJISに変わってしまいます)

質問者さんがおっしゃっている「SORTコマンドではうまくできませんでした」はどのような事を

指していますでしょうか?


もしコマンドラインのSORTである必要がなければ、

GUIのフリーソフトを使われても実現が可能と思います。

http://www.vector.co.jp/vpack/filearea/win/util/text/sort/

◎質問者からの返答

>質問者さんがおっしゃっている「SORTコマンドではうまくできませんでした」はどのような事を

>指していますでしょうか?

まさに、結果が sjisに変わってしまうことなんですよ。


3 ● ardarim
●100ポイント ベストアンサー

Windowsのコマンドプロンプトは、マルチバイト環境なのでリダイレクトでUnicodeファイルを出力することはどうやっても不可能です。

コンソールのリダイレクトを使わずに単体のプログラム内で完結したソートをする必要があります。


スクリプトで書いてみましたのでよろしければどうぞ。

適当なファイル名(例:sort.js)で保存して、コマンドプロンプトから

cscript sort.js 入力ファイル名 出力ファイル名

で実行してください。UTF-16の中国語テキストファイル(4MB)がソートできることは確認しました。


fso = WScript.CreateObject("Scripting.FileSystemObject");
wsh = WScript.CreateObject("Wscript.Shell");

if(WScript.arguments.length != 2){
WScript.echo("入力ファイル、出力ファイルを指定してください");
WScript.quit();
}

fileName = WScript.arguments.item(0);

try {
txtFile = fso.openTextFile(fileName, 1, false, -1);
} catch(e){
WScript.echo(e);
WScript.echo("ファイルオープンエラー(" + fileName + ")");
WScript.quit();
}

lines = new Array;

i = 0;
while(!txtFile.atEndOfStream){
lines[i++] = String(txtFile.readLine());
}

txtFile.close();

lines.sort(function(a,b){ return a.localeCompare(b); });

txtFile = fso.createTextFile(WScript.arguments.item(1), true, true);
for(i = 0; i < lines.length; i++){
txtFile.writeLine(lines[i]);
}
txtFile.close();

fso = null;
wsh = null;

WScript.quit();

URLはダミー

http://q.hatena.ne.jp/1224777958

◎質問者からの返答

おおお?すごいでつ。

4GBのファイルがソートできました。

メモリはつかいますけど・・・

これで、問題は解決できました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ