• 締切済み

テキストデータの自動コンバートの方法について

1行が32桁の数字からなる複数行のテキストデータがあります。 それぞれの行はタイムレコーダーからの打刻データを示しており、 時間とともにデータ(ファイル)がどんどん増えていきます。 以下にその一例を抜き出してみます。 31200704120803000100002400070014 31200704121847000200002400070014 31200704130804000100002400070014 31200704131850000200002400070014 31200704160804000100002400070014 31200704161324000300002400070014 31200704161354000400002400070005 31200704161525000300002400070005 31200704161553000400002400070014 31200704161831000200002400070014 31200704170807000100002400070014 31200704171841000200002400070014 これを、特定の列(第18列)の数字に対してのみ、他の文字に コンバートする必要が生じ、困ってます。 具体的には、第18列の1~4の数字に対し、以下のようにコンバートを したいと思っています。 1 → ア 2 → イ 3 → O 4 → Q 以上のことを自動処理したいのですが、どのような方法で実現可能でしょうか? 幅広いご意見をお待ちしています。

みんなの回答

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

31200704120803000100002400070014 が 31200704120803000ア00002400070014 となるべき処が 3 1 2 0 0 7 0 4 1 2 0 8 0 3 0 0 0 ア 0 0 0 0 2 4 0 0 0 7 0 0 1 4 となっているという事ですか? 回答する前にも確認していますが、再度確認してもそのようにはならないですが? 冒頭の質問のサンプルで確認しています。 実際のデータと結果を提示してもらえますか? ついでにVBSのコードも。 ただ、ファイル容量が倍くらいになるのは文字コードが変わったためだろうと 思います。 set outFile = objFSO.CreateTextFile("d:\temp\b.txt", ForWriting,True) を set outFile = objFSO.CreateTextFile("d:\temp\b.txt", ForWriting,False) にしてみてください。

DEKAMARO
質問者

お礼

数字と数字の間にスペースが入っているように見えていたのは、 こちらで使用しているテキストエディタのせいでした。 大変失礼いたしました。   また、コードの修正部分を反映してみたところ、 そのテキストエディタでも意図どおりの結果が得られることを 確認しました。 お知恵を貸していただき、大変感謝します。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

VBS ですとこんな感じ。 元ファイル(a.txt) を読み込んで b.txt に書いてます。 下記を拡張子 VBS にして試してみて。 Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 Set objFSO = CreateObject("Scripting.FileSystemObject") Set inFile = objFSO.OpenTextFile("d:\temp\a.txt", ForReading) set outFile = objFSO.CreateTextFile("d:\temp\b.txt", ForWriting,True) Do Until inFile.AtEndOfStream   strLine = inFile.ReadLine   Select Case Mid(strLine,18,1)     Case 1     strLine = Left(strLine,17) & "ア" & Right(strLine,Len(strLine) -18)     Case 2     strLine = Left(strLine,17) & "イ" & Right(strLine,Len(strLine) -18)     Case 3     strLine = Left(strLine,17) & "O" & Right(strLine,Len(strLine) -18)     Case 4     strLine = Left(strLine,17) & "Q" & Right(strLine,Len(strLine) -18)   End Select   outFile.writeline strLine Loop inFile.Close outFile.close msgbox "おしまい"

DEKAMARO
質問者

補足

具体的な回答ありがとうございます。 試しに実行してみたのですが、b.txtで各数字の間に スペースが含まれてしまうようでした。 これは修正可能でしょうか?

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

perlなら簡単にできます。 但し、perlを使うための環境をインストールする必要があります。

回答No.1

vbsでしたら、if文とmidを使えば変換可能です。