• 締切済み

データを整列させたい

うまく説明できるかわかりませんが、 これをどうにか簡単な方法でできないかどなたか名案があれば教えて下さい。 さっき上司から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

  • CSVデータを取得・編集しTXTに保存する方法

    Excel2016のVBAで、ある時系列のCSVファイルのデータを取得・編集し、テキストファイルに保存する方法についてなんですが、やりたいことの順序としては次の通りです。 ■1. CSVファイルの保存先が特定されていないため、ダイアログで開くファイルを指定します。ただ、開く際、1ヶ月の短い期間であってもExcelの最大行数1,048,576行を軽く超えてしまうため、テキストファイルで開きます。 ■2. 開かれたファイルのデータを取得・編集します。 テキストファイルで開いたデータは、1行目から順に次のようになっています。 1行目は文字列 2003.05.04 21:00:00.626,118.99,118.94,20.8,0.6 2003.05.04 21:00:00.989,118.969,118.949,44.4,54.3 2003.05.04 21:00:01.408,118.958,118.948,28.7,0.8 2003.05.04 21:00:01.741,118.957,118.942,0.5,15.7 2003.05.04 21:00:22.638,118.953,118.943,0.5,37.7 2003.05.04 21:00:25.348,118.96,118.94,60.5,35.7 2003.05.04 21:00:26.087,118.956,118.946,8,13.6 2003.05.04 21:00:27.984,118.956,118.952,23.9,8.4 2003.05.04 21:00:49.884,118.968,118.948,3.2,47.1 2003.05.04 21:00:55.855,118.972,118.952,52.7,39.1 2003.05.04 21:01:05.362,118.971,118.961,21.5,4 2003.05.04 21:01:21.012,118.983,118.958,0.6,38.3 2003.05.04 21:01:33.806,118.984,118.964,8.8,35.1 2003.05.04 21:01:51.362,118.986,118.966,76.1,38.1 2003.05.04 21:01:52.171,118.987,118.967,47.1,39.1 2003.05.04 21:02:05.014,118.982,118.972,0.8,8.5 2003.05.04 21:02:06.232,118.985,118.965,0.9,30.9 2003.05.04 21:02:15.026,118.983,118.963,7.6,40.5 2003.05.04 21:02:19.716,118.979,118.959,11.7,32 2003.05.04 21:02:31.766,118.971,118.961,0.6,53.5 2003.05.04 21:02:49.565,118.975,118.955,8,54.3 2003.05.04 21:03:01.095,118.973,118.953,12,74 2003.05.04 21:03:12.396,118.968,118.958,31.9,64.7 ~ 最終行は改行 1行目は単なる文字列で、不要なデータのため除きます。 必要なデータは2行目からで、必ず、次のような形式になっています。 「西暦4桁」、「.」、「月2桁」、「.」、「日にち2桁」、「半角スペース」、「時間2桁」、「:」、「分2桁」、「:」、「秒小数点3桁」、「,」、「数値」(小数点桁数変動)、「,」、「数値」(小数点桁数変動)、「,」、「数値」(小数点桁数変動)、「数値」(小数点桁数変動) ちなみに、データが飛ぶことがありますが、必ず時系列になっており、恐らく途中で空白の改行はありません。 そして、データ取得に必要なデータは、年月日と時刻、2つ目の数値です。 上記のデータの2行目の例だとすると、次のようになります。 2003.05.04 21:00:00.626(●必要),118.99(×不要),118.94(●必要),20.8(×不要),0.6(×不要) 次に編集するのは、同じ1分以内の年月日と時刻の「1分間隔の年月日と時刻」、「最初の数値」、「最大値」、「最小値」、「最後の数値」、「1分間のデータの個数」で、1分間隔にしてもらいたいのです。 同じ1分以内の年月日と時刻というのは、「**:**:00.000」から「**:**:59.999」までの間です。「21:01」であれば、「21:01:00.000」から「21:01:59.999」までということになります。 例えば、「2003.05.04 21:01」であれば、上記のデータから抜き出すと次のようになります。また、1分間のデータの個数は5となります。 2003.05.04 21:01:05.362,118.971,118.961(最初の数値),21.5,4 2003.05.04 21:01:21.012,118.983,118.958(最小値),0.6,38.3 2003.05.04 21:01:33.806,118.984,118.964,8.8,35.1 2003.05.04 21:01:51.362,118.986,118.966,76.1,38.1 2003.05.04 21:01:52.171,118.987,118.967(最大値、最後の数値),47.1,39.1 恐らく、同じ1分以内の年月日と時刻のデータが1個だけということはないと思いますがその場合、「最初の数値」、「最大値」、「最小値」、「最後の数値」は全て同じ数値となります。 そして、出力する際、次のような形式にします。 「西暦4桁」、「.」、「月2桁」、「.」、「日にち2桁」、「,」、「時間2桁」、「:」、「分2桁」、「,」、「最初の数値」、「,」、「最大値」、「,」、「最小値」、「,」、「最後の数値」、「1分間のデータの個数」 「2003.05.04 21:01」であれば、編集結果は次のようになります。 2003.05.04,21:01,118.961,118.967,118.958,118.967,5 これを1分間隔で時系列に沿って1行目から、 2003.05.04,21:01~ 2003.05.04,21:02~ 2003.05.04,21:03~ ~ のようにします。 変数を使うのであれば、各変数名を次のようにしてもらいたいです。 「最初の数値」を、Open、 「最大値」を、High、 「最小値」を、Low、 「最後の数値」を、Close、 「1分間のデータの個数」を、Volume ■3. ダイアログで開くように指定し、保存先を決め、編集したデータが入ったテキストファイルが自動的に作成され、保存できるようにします。 ファイル名は、 「元のCSVファイルの左から6文字目まで」、「_」、「最初のデータの西暦4桁」、「.」、「最初のデータの月2桁」、「.」、「最初のデータの日にち2桁」、「.」、「最初のデータの時間4桁」(「:」を除いた時間と分)、「-」、「最後のデータの西暦4桁」、「.」、「最後のデータの月2桁」、「.」、「最後のデータの日にち2桁」、「.」、「最後のデータの時間4桁」(「:」を除いた時間と分) と自動的にファイル名が付けられるようにしてもらいたいです。 例えば、次のような感じです。 ******_2003.05.04.2100-2003.05.30.1459 少し調べたのですが、CSVファイルを開くプログラムは分かったのですが、それ以降のテキストファイルで開き、データを取得などは分かりませんでした。 自分が不勉強で申し訳ないのですが、可能であればこれらのVBAによるプログラムを教えてください。 回答よろしくお願いします。

  • 長~いデータを切りたい

    テキストファイルで、 8431376116486164806468540980980604540684134540048604・・・ と何万桁という数値が並んだデータがあります。 これを 84313761 16486164 80646854 09809806 04540684 13454004  8604・・・ と8桁×何万桁となるように改行するにはどうしたらいいのでしょうか?

  • データ一部分の合計を求めたい

    環境:vb6,access97 質問内容: tableA (項目1,数字1,時間1) (項目2,数字2,時間2) (項目3,数字3,時間3) ・ ・ ・ (項目n,数字n,時間n) データ型: 項目は、テキスト 数字は、小数点2桁まで 時間は、hh:mm このテーブルに対し、一部分の合計を取りたいですが、 sql文の書き方を教えていただきませんか?、 別の方法なら、どんな方法がありますか? 要は、数字小数点以下の合計:       sum(cint(right(数字,2)) 時間mmのみの合計:        sum(cint(right(時間,2)) を求めたいです。よろしくお願いいたします。

  • エクセルデータをテキストに移す方法

    エクセルのデータをテキストに移す方法を教えてください。 例えばエクセルの1行目~100行目までデータがあるとして、その100個のデータを100個のテキストファイルにそれぞれ入れてくれるソフトがあれば教えていただきたいです。 1行のデータを1つのテキストファイルに移すという作業です。 コピペすれば済む話ですが数が膨大なので、時間がかかりすぎます。 よろしくお願いします。

  • アクセスでのテキストファイルへのエクスポート

    Access2000で あるテーブルにあるデータを区切り付きテキストファイルにエクスポートしたいのですが,数値データ(倍精度)が小数点以下桁処理されて出力されてしまいます。どうしてでしょうか? 良い方法はありませんか? 0.012 → 0.01 0.013 → 0.01 0.014 → 0.01 0.015 → 0.01

  • ワードの差し込み印刷

     エクセルの数字のデータをワードで差し込み印刷しようとすると、小数点以下が10桁くらい表示されてしまいます。  エクセルのデータをセルの設定で文字列に変更しても、数字にして小数点を1桁に設定しても同じです。  どうしたらいいでしょう?

  • 最大50桁の実数の和・差・積を求めたい

    C++で、2つの最大50桁の実数を入力して、その和・差・積を求めるプログラムを作りたいのです。 実数をchar型に入力させて、それを1桁ずつint型に変換したいのですが、どのようにやればよいのでしょうか? また、その際、符号や小数点はどうすればよいのでしょうか? 計算の流れとしては、 ○足し算 小数点を合わせる ⇒下位の桁から1桁ずつ足し算していく ⇒結果が10以上の場合、10を引き、左隣の桁の数字に1を加える ○引き算 小数点を合わせる ⇒下位の桁から1桁ずつ引き算していく ⇒引かれる数字のほうが引く数字より小さい場合、引かれる数字に10を足し、左隣の桁の引かれる数字から1を引く というような感じで考えているのですが、小数点の合わせ方がわかりません。 また、掛け算に関しては、筆算の要領でやろうと思うのですが、どのようにやればよいのでしょうか? 私はC++の勉強歴が短いので、できれば初心者向けのわかりやすい説明でお願いします。

  • エクセルマクロ小数点桁数

    テキストデータからエクセルマクロで吸出しを行う中で 数値データをNumberFomatLocalでカンマと小数点を指定したいのですが 小数点以下がセルによって2桁3桁だったり、なかったりとバラバラで データに合せてそのまま反映させたいのですが設定する方法がありますでしょうか。 "#,##0.0"だと当然関係なく小数点以下は1桁で反映されてしまいます。 .00でも表示させておきたいです。

  • VB初心者。小数点以下の表示でつまづいています(2

    『VB初心者。小数点以下の表示でつまづいています(涙』 (・・・過去質問 解決済み) では大変お世話になりました。 さて、上記質問は解決したかに思い、お礼もしてして終了したのですが、 検証しておりましたら問題が見つかりました。 以下、質問内容を修正して、再質問します。よろしくお願いしますm(__)m VB .NET環境 Microsoft Visual Studio / ActiveReportで帳票を作成しています。 DBからの値が、小数点以下ありの場合(例:1.07)の時はそのまま表示し、小数点以下が.00の場合(例:1.00)の時、整数部分のみを表示させたいのです。 質問の『値』ですが、今回の値は小数点第2位までです。 #.00 の時 → # と表示。 #.01~99 の時 → そのまま表示。 としたいのです。 ちなみに、小数点から左(整数部分)の桁は9桁まで入る可能性があります。 前回解決した際は、小数点より右1桁、左1桁で質問してしまったので、  H_数量.Text = Format(Val(H_数量.Text), "0.0")  If Right(H_数量.Text, 2) = ".0" Then  H_数量.Text = Format(Val(H_数量.Text), "0")  End If と回答いただき、このパターンではうまく動きました。 小数点以下2桁のパターンも、コードを変更し、  H_数量.Text = Format(Val(H_数量.Text), "0.00")  If Right(H_数量.Text, 2) = ".00" Then  H_数量.Text = Format(Val(H_数量.Text), "0")  End If でOKでした。 しかし、小数点より左9桁、右2桁を試してみると、ダメなのです。 1行目、  H_数量.Text = Format(Val(H_数量.Text), "0.00") を、  H_数量.Text = Format(Val(H_数量.Text), "#,##0.00") と変更しても、 小数点左が9桁には対応できません。 "###,###,##0" とか、"000,000,000" とか色々試しましたが、 500.00 の時、 000,000,500 と表示されました。 どのようにコードを書いたら良いでしょうか? アドバイスお願いしますm(__)m

  • 差し込み印刷での小数点表示について

    マイクロソフト2010での差し込み印刷で困っています。 エクセルの数字のデータをワードで差し込み印刷しようとすると、小数点以下が10桁くらい表示されてしまいます。  エクセルのデータをセルの設定で文字列に変更しても、数字にして小数点を1桁に設定しても同じです。  小数点第1位まで表示させるにはどうしたらいいでしょう? 初心者なので、できればわかり易い回答をお願いいたします。