- 締切済み
テキストデータの自動コンバートの方法について
1行が32桁の数字からなる複数行のテキストデータがあります。 それぞれの行はタイムレコーダーからの打刻データを示しており、 時間とともにデータ(ファイル)がどんどん増えていきます。 以下にその一例を抜き出してみます。 31200704120803000100002400070014 31200704121847000200002400070014 31200704130804000100002400070014 31200704131850000200002400070014 31200704160804000100002400070014 31200704161324000300002400070014 31200704161354000400002400070005 31200704161525000300002400070005 31200704161553000400002400070014 31200704161831000200002400070014 31200704170807000100002400070014 31200704171841000200002400070014 これを、特定の列(第18列)の数字に対してのみ、他の文字に コンバートする必要が生じ、困ってます。 具体的には、第18列の1~4の数字に対し、以下のようにコンバートを したいと思っています。 1 → ア 2 → イ 3 → O 4 → Q 以上のことを自動処理したいのですが、どのような方法で実現可能でしょうか? 幅広いご意見をお待ちしています。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- nicotinism
- ベストアンサー率70% (1019/1452)
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) にしてみてください。
- nicotinism
- ベストアンサー率70% (1019/1452)
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 "おしまい"
補足
具体的な回答ありがとうございます。 試しに実行してみたのですが、b.txtで各数字の間に スペースが含まれてしまうようでした。 これは修正可能でしょうか?
- tatsu99
- ベストアンサー率52% (391/751)
perlなら簡単にできます。 但し、perlを使うための環境をインストールする必要があります。
- olive_surf
- ベストアンサー率27% (9/33)
vbsでしたら、if文とmidを使えば変換可能です。
お礼
数字と数字の間にスペースが入っているように見えていたのは、 こちらで使用しているテキストエディタのせいでした。 大変失礼いたしました。 また、コードの修正部分を反映してみたところ、 そのテキストエディタでも意図どおりの結果が得られることを 確認しました。 お知恵を貸していただき、大変感謝します。