このファイルをソートしたいのですが、良い方法がありましたら教えてください。
※SORTコマンドではうまくできませんでした。
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はダミー
まず 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 度指定されました。
????
エラーの原因はパラメータの書き方です。
パラメータの 「 -L 」の部分を「 /L 」と書き換えてください。
SORTコマンドのパラメータは - ではなく / 表記になります。
また、私のところでは
WinXPSP3日本語版環境で
「SORT input.txt > output.txt」
と特別な事をしなくても正常に処理できました。
(ただしinput.txtがUnicodeファイルなのに対して、output.txtはSJISに変わってしまいます)
質問者さんがおっしゃっている「SORTコマンドではうまくできませんでした」はどのような事を
指していますでしょうか?
もしコマンドラインのSORTである必要がなければ、
GUIのフリーソフトを使われても実現が可能と思います。
>質問者さんがおっしゃっている「SORTコマンドではうまくできませんでした」はどのような事を
>指していますでしょうか?
まさに、結果が sjisに変わってしまうことなんですよ。
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はダミー
おおお~すごいでつ。
4GBのファイルがソートできました。
メモリはつかいますけど・・・
これで、問題は解決できました。
おおお~すごいでつ。
4GBのファイルがソートできました。
メモリはつかいますけど・・・
これで、問題は解決できました。