• 締切済み

データを整列させたい

うまく説明できるかわかりませんが、 これをどうにか簡単な方法でできないかどなたか名案があれば教えて下さい。 さっき上司から2つのテキストファイルを渡され、 片方を見本として、データをキレイに並べてくれ…と言われました。かなり急いでいると言うのです。 それはどこかから落としたデータのようなもので数字ばかりなのですが、 711792002213205.13****0.00****1.00**** 213205.13****0.00****20060208172940200601 71310001254761.42*****0.00****1.00*****54761.42*****0.00****20060208172940200601 ↑このようなものがズラーッと下に続いていて、 見本は… 000786531****98981.97**215.00*****1.00*****21034.16**215.0020060208172940200601 600100001***288886.33**840.00*****1.00****272295.74**750.0020060208172940200601 こうです。 というか*印がついているところは本当はスペースになっています。 つまりしなければいけないのは… まず左にある数字は9桁の数字と別の数字がまざっているので、9桁だけを左に置き、あとは見本と同じように小数点を揃え、最後の2つはひとつにすることです。 説明がうまくできないので例えば… 711792002213205.13****0.00****1.00*****213205.13****0.00****20060208172940200601 ↓ 711792002***213205.13****0.00*****1.00****213205.13****0.0020060208172940200601 こんなカンジに。(汗) 最初はそのままテキストファイルを直にいじってこつこつ直していくしかないかなぁと思ったのですが、 なんせものすごく膨大な量です! EXCELでとかACCESSでとか何でも良いので、 具体的説明でなくとも何か案があれば教えて頂きたいです。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

入力元の小数点以下が2桁で固定されているように見えますが、そうでしょうか? もしそうなら、それぞれを空白で切り出して、それぞれのフィールド毎に文字の最初に空白を補って右寄せすれば良いです。 JScriptでのサンプルを作ってみました。 整形.js とでも名前を付けて保存し、該当テキストデータファイルをドラッグアンドドロップして下さい。 -----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8< /* 入力見本(*はスペース) 711792002213205.13****0.00****1.00*****213205.13****0.00****20060208172940200601 出力見本 711792002***213205.13****0.00*****1.00****213205.13****0.0020060208172940200601 フィールドサイズ 9,12,8,9,13,28 */ var fso, file, fileList; var oFileName, outFile, readFile; var strLine, field; fileList =WScript.Arguments; //ドロップしたファイルのリスト fso = WScript.CreateObject("Scripting.FileSystemObject"); for(var i=0;i<fileList.length;i++){ file=fileList(i); oFileName = fso.BuildPath(fso.GetParentFolderName(file), "整形済" + fso.GetfileName(file)); //作業ファイル "整形済み+元の名前"のファイルを作る outFile = fso.CreateTextFile(oFileName, true); readFile = fso.OpenTextFile(file); while(!readFile.AtEndOfStream){ strLine = readFile.ReadLine(); //一行読み出し field=strLine.split(/\s+/); //スペースで分割 strLine = field[0].substr(0,9) + //最初のフィールドは、9文字 //FormatString は、文字列を指定したサイズの右寄せの文字列にする FormatString(field[0].substr(9), 12) + //その後ろ FormatString(field[1], 8) + FormatString(field[2], 9) + FormatString(field[3], 13) + FormatString(field[4]+field[5], 28); outFile.WriteLine(strLine); } readFile.Close(); outFile.Close(); } //指定した桁に足りない分先頭にスペースを補う function FormatString(str, size){ while(str.length != size){ str = " "+str; } return str; }

  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.2

テキストファイルの拡張子はtxtのままにしておきます。(壊れてもいいようにバックアップは取ってください。 1.Accessを立ち上げ、空のデータベースを作成します。データベース画面でオブジェクトにてテーブルを選びます。ファイルメニュー→外部データの取り込み→インポートを選択します。 2.「インポート」ダイアログボックスが開いたらファイルの種類を"テキスト ファイル(*.txt;*.csv;*.tab;*.asc)”に変更し、該当のファイルを指定してインポートをクリックします。 3.拡張子がtxtの場合はここで”テキストインポート ウィザード”が立ち上がります。 4.テキストインポート ウィザードで”固定長”にチェックした後に”次へ”をクリックします。 5.次画面で実際にセルで区切りたい場所を設定します。設定方法は画面を参照してください。設定したら”次へ”をクリックします。 6.次画面で新規テーブルに保存するを選び”次へ”をクリックします。 7.次画面で各フィールドのデータ型を設定します。数値でしたら長整数型で問題ないと思いますが、OSの制限上、小数点以下の数値に関して丸めが発生する可能性もありますので、小数点4桁まででしたら型は通貨型にしておいた方がいいです。(通貨型は小数点4桁までで丸めが無い事を保証しています。)設定が終わったら”次へ”をクリックします。 8.次画面では主キーは設定しません。”次へ”をクリックします。 9.インポートするテーブル名を指定して”完了”を押します。 コレでAccessのテーブルに任意に区切られた形でデータがインポートされました。ここから編集・出力に入ります。 1.データベース画面でオブジェクトにクエリを選びます。 2.クエリの新規作成を行い、インポートしたテーブルの列を出力したいレイアウトで並べます。また並び替え等もココで指定します。指定が終わったら表示メニュー→データシートビューで出力内容を確認します。 3.問題がなかったらファイルメニュー→エクスポートを選びます。 4.エクスポートのダイアログボックスが表示されたら出力ファイル名を入力し、ファイルの種類を"テキスト ファイル(*.txt;*.csv;*.tab;*.asc)”に変更、全てを保存をクリックします。 5.テキスト エクスポート ウィザードが起動します。固定長を選んで”次へ”をクリックします。 6.次画面で各項目の区切りを設定します。設定が終わったら”次へ”をクリックします。 7.次画面ですが、またエクスポートする時に同じ形式で出力する事がある場合は”設定”ボタンをクリックし、エクスポート定義画面を表示し保存ボタンを押す事により出力形式を保存する事が出来ます。保存後にOKを押してエクスポートウィザードに戻りエクスポートするファイル名を確認してから完了を押してください。 以上で固定長テキストの編集と出力が可能です。

  • cobun5513
  • ベストアンサー率59% (25/42)
回答No.1

テキストエディタとかお持ちですか? スペースの部分を,(カンマ)に置換して、カンマ区切りのCSVに変更する。ファイル名「xxx.csv」 CSVに変換したら、エクセルにで開けるので列移動する。 それを再度保存してテキストエディタで開いて、見本のように整形する。 という感じでどうでしょう? もう遲い?

関連するQ&A