• 締切済み

テキストファイルの置換

テキストファイル"A.TXT"があります。 ファイルの中は項目を「,」(カンマ)で区切られています。 3個目の「,」(カンマ)の後に「日付」が入っていますが、"H21.2.5"や"H21.2.10"となっています。 1桁目は必ず"H"です。(平成の"H") ex. あああああ,AAA,H21.2.5,ああああああ いい,BBBBB,H21.2.10,いいいい この"H21.2.5"を"090205"と置換したいのですが、スキルがないため方法がわかりません。 和暦→西暦下2桁 月→2桁(1桁の時は頭"0") 日→2桁(1桁の時は頭"0") すでにあるファイルを処理するのであれば、Excel読み込み後に置換処理などでなんとかなると思いますが、日次で毎日ファイルが作成されるため、自動的に処理したいのです。 VBSなどのプログラムで一括で処理できないでしょうか。 お力添えをいただければありがたいです。 よろしくお願いいたします。

みんなの回答

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.5

バッチファイルで作ってみました。 ざっと作ったので、a.txtに特殊な記号(<,>,|など)が入っていたり、カンマで区切られた項目に空白が入っていたりするとうまく動かないかもしれません。とりあえず、例示されているテキストファイルでは動作確認しました。 置換した結果はkekka.txtに格納されます。 a.txtを置き換えたいときは、5行目と6行目の:copyと:renの先頭のコロンを取ってください。オリジナルのa.txtをa.bakにリネームして結果をa.txtに格納します。 :---------------------------------------------sample.bat echo off type NUL>kekka.txt for /F "delims=" %%l in (a.txt) do call :sub %%l type kekka.txt :copy /y a.txt a.bak :ren kekka.txt a.txt exit /b :sub set line=%* for /F "tokens=3 delims=, " %%a in ('echo %*') do set before=%%a for /F "tokens=1,2,3 delims=H." %%a in ('echo %before%') do set yg=%%a&set mm=%%b&set dd=%%c set /a yy=(yg+1988) %% 100 set yy=0%yy% set mm=0%mm% set dd=0%dd% set yy=%yy:~-2% set mm=%mm:~-2% set dd=%dd:~-2% set after=%yy%%mm%%dd% call echo %%line:%before%=%after%%%>>kekka.txt goto :EOF

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

#2です。 以下のようなスクリプトを作成して下さい。 ------------------------------------ while(<>){ @elm = split(/,/,$_); $hdate = $elm[2]; if (substr($hdate,0,1) eq 'H'){ @hymd = split(/\./,$hdate); substr($hymd[0],0,1) = ""; $year = ($hymd[0] + 1988) % 100; $date = sprintf("%02d%02d%02d",$year,$hymd[1],$hymd[2]); $elm[2] = $date; } $line = join(',',@elm); print $line; } ------------------------------------------- これをsample.plの名前で保存します。(ファイル名は任意) コマンドプロンプトで perl sample.pl 入力ファイル名 とすると、変換結果が画面に表示されます。 perl sample.pl 入力ファイル名 > 出力ファイル名 とすると、出力ファイル名に変換結果が格納されます。 以下、入力ファイルと変換結果です。 --------------------------------- あああああ,AAA,H21.2.5,ああああああ いい,BBBBB,H21.2.10,いいいい 噂表,MMM,H1.2.10,表 -------------------------------- あああああ,AAA,090205,ああああああ いい,BBBBB,090210,いいいい 噂表,MMM,890210,表 --------------------------------- もちろん、perlがないと動きませんので、もし、ない場合は perlをインストールしてください。

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.3

日付の箇所、例えば下記のような方法はどうでしょうか。 strHDate = "H21.2.5" WScript.Echo strYYMMDD(CDate(Replace(strHDate,".","/"))) Function strYYMMDD(strDate) YY = Right(Year(strDate) ,2) MM = Right("0" & Month(StrDate) ,2) DD = Right("0" & Day(StrDate) ,2) strYYMMDD = YY & MM & DD End Function

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

perlでもいいなら、サンプルをつくれますが。

ogaki_3ok
質問者

補足

嬉しいお言葉をありがとうございます。 お言葉に甘えさせていただけるのであれば・・・。 よろしくお願いいたします。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

H21.2.5やH21.2.10のままでは上手くいかないでしょう 『.』を『/』に置換して CDateに与えてやれば日付として認識します これを FormatDateTimeで文字列に変換して『/』や余分な20を削除といった手順かと ファイルのOpenには FSO(FileSystemObject)のOpenTextFileで開いて ReadLineで1行取得 Splitで ,ごとの要素を取得 3番目の要素の 『.』を Replaceで置換 CDateで日付型に変換 FormatDateTimeで文字列に 余分な『/』や『20』を削除 Joinで1行に復元 一時ファイルへ保存 ReadLineに戻って処理 元ファイルを閉じてから DeleteFileなどで削除 MoveFileなどで一時ファイルの名前を変更 といった手順でしょう ただしこの方法はWindowsの設定に依存します WinXPなら コントロールパネルの『地域と言語のオプション』の短い形式で表示する日付が 2009/2/4 つまり yyyy/M/dと設定されていると 2009/02/04とはなりません

ogaki_3ok
質問者

補足

早々にありがとうございます。 ご指示のような「手順」はわかっているのですが、 スキルが無いので、具体的なコーデイング方法がわかりません。 自分なりにVB関係のWebも調べはしましたが。 そのあたりを教えていただけるとありがたいのですが。

関連するQ&A

  • テキストファイルに固定文字挿入

    テキストファイル"A.csv"があります。 3個目の「,」の後に数字6桁が入っています。 他の項目は桁数可変ですが、この部分は6桁固定です。 ex. あああああ,AAA,090523,ああああああ いい,BBBBB,090101,いいいい この"090523"を"09/05/23"と置換(2桁おきに"/"を挿入)したいのですが、スキルがないため方法がわかりません。 すでにあるファイルを処理するのであれば、Excel読み込み後に置換処理などでなんとかなると思いますが、日次で毎日ファイルが作成されるため、自動的に処理したいのです。 VBS、バッチなどのプログラムで一括で処理できないでしょうか。 お力添えをいただければありがたいです。 よろしくお願いいたします。

  • テキストファイルの一部を複数パターンで置換

    初めて質問させていただきます。 以下のようなテキストファイル(元ファイル) があります。 1行目 あいうえお 2行目 codea=aaaaa/$$ 3行目 codeb=11111*11111 4行目 … この2行目と3行目の「aaaaa」「11111」 の文字列を以下に従って置換し保存したいです。 置換パターンは、 別ファイルに一覧になっています。 bbbbb 22222 ccccc 33333 … これを、元ファイルの 「aaaaa」を「bbbbb」に、 「11111」を「22222」に置換し、 ファイル名を「bbbbb-22222.txt」として 保存するのを、 置換パターンの数だけ行う必要があります。 VBA、バッチは経験があります。得意分野ではありませんが… 申し訳ありませんが、ご教授いただけないでしょうか?

    • ベストアンサー
    • CSS
  • 【Ruby】テキスト置換を1ファイル完結にしたい

    memo.txtの中に含まれている"俺の飯"という文字列を"私のごはん"というふうに置換を行いたいのですが、 現在のやり方だとファイルを開いて1行ずつ読み込んで新しいファイルに文字列を書きだしており 読み込んだ際、置換対象の文字列があった場合に置換して書きだしておりますが このやり方だとどうしても新規ファイルを出力しなければいけません。 これを新規ファイルを作らずにmemo.txtの中身だけを書き換えるようにするには どのような処理にすれば良いのでしょうか? 何卒宜しくお願い致します。 ---- sample.rb require 'rubygems' open("memo.txt"){ |f| open("after_memo.txt","w"){ |o| while line = f.gets line.gsub!("俺の飯", "私のごはん") o.puts line end } } -- memo.txt 俺の飯はリーズナブル! 俺の飯美味しそう!

    • ベストアンサー
    • Ruby
  • バッチファイルで複数のテキストファイルの置換

    バッチファイルで以下のような処理を行うことはできないでしょうか? フォルダ1以下の全てのテキストファイル内の abcde という文字列を あいうえお に置換して、上書き保存ではなく 元のファイル名+(編集済み).txt というファイル名で同じ場所に保存できないでしょうか。 バッチファイルで出来ない場合他の物でも構いません。 ――――――――――――――――――――――――――――― 処理前 フォルダ1   │   ├フォルダ2   │  └ファイル1.txt (内容:123abcde)   │   ├フォルダ3   │  └フォルダ4   │     └ファイル2.txt (内容:abcde123abcde123)   │   └フォルダ5      └ファイル3.txt (内容:456fghij) ――――――――――――――――――――――――――――― ↓ ――――――――――――――――――――――――――――― 処理後 フォルダ1   │   ├フォルダ2   │  └ファイル1.txt (内容:123abcde)   │  └ファイル1(編集済).txt (内容:123あいうえお)   │   ├フォルダ3   │  └フォルダ4   │     ├ファイル2.txt (内容:abcde123abcde123)   │     └ファイル2(編集済).txt (内容:あいうえお123あいうえお123)   │   └フォルダ5      └ファイル3.txt (内容:456fghij) ――――――――――――――――――――――――――――― こんな感じで出来ないでしょうか。 よろしくお願いします。

  • ファイル内の文字列を置換するcscriptについて

    お世話になります。 早速ですが、 以前、以下のような、「UNIXファイルの文字列を置換する」プログラムを Cscript で記述する方法を教えていただいたものですが、 cscript //nologo foo.vbs < t22.org > t22.txt ====foo.vbs==================================================== Do While Not WScript.StdIn.AtEndOfStream str = WScript.StdIn.ReadLine WScript.StdOut.Write replace(str,"abc","xxx") & vbLF Loop 今回、これをさらに、 Cscript で「置換するファイル」と「置換する文字列」も指定するプログラム にしたいと思い記述してみたのですが、下記のような問題が発生します。 「置換後のファイルの最後に改行文字が入ってしまいます。」原因がわかりません。 cscript //nologo f00.vbs t22.txt aaa xxx ====foo.vbs==================================================== Dim myFile Dim myRec Dim fso Dim txt, wd1, wd2 txt = WScript.Arguments(0) wd1 = WScript.Arguments(1) wd2 = WScript.Arguments(2) WScript.Echo txt WScript.Echo wd1 WScript.Echo wd2 Set fso = CreateObject("Scripting.FileSystemObject") Set myFile = fso.OpenTextFile(txt) myRec = myFile.ReadAll myRec = replace(myRec,wd1,wd2) myFile.Close Set myFile = fso.CreateTextFile(txt) myFile.WriteLine (myRec) myFile.Close =============================== このコードのどこに問題があるのでしょうか? 読み込んでいるファイルは、Shift-JIS LF改行のファイルです。 あるいは、 もっと簡単な記述方法等ありましたら、ご意見、ご指導ください。

  • VBSで文字列の置換

    VBSまったくの初心者で、「そんなもんWebで調べろ」とお叱りを受けるのを承知でお聞きします。 C:¥置換¥あああ.txt のテキストファイル内にある文字列"ABC"を"DEF"に置換するVBSはどのように記述すればよいでしょうか?。 よろしくお願いいたします。

  • txtファイルに書き込んである文字の置換方法についてお聞きしたいのです

    txtファイルに書き込んである文字の置換方法についてお聞きしたいのですが aaa@yahoo bbb@yahoo のようになっている文章の@以前の文字列をすべてXXXに置換したいのですが @以前という設定はできますか? 1つづつだと日が暮れてしまいます 何か別にソフトがありましたら教えてください

  • 置換コマンド

    freeBSD5.3を使用している初心者です。 あるディレクトリ以下の全ファイルに対し、一度に内容の文字を置換したいのですがうまくいきません。 例えば /hoge/aaa.txt /hoge/bbb.txt /hoge/ccc.txt と、/hoge以下に3ファイルがあり、このファイルにAAAという文字列があるなら、AAAをBBBにしたいと思っています。 sed s/AAA/BBB/g /hoge/* とすると、置換後の中身が表示はされますが、それに置きかわったファイルは/hoge/以下に保存されていません。(もとのAAAのまま) できたら、/hoge 以下の置換されたファイルを/hoge2以下に同じ名前で保存させたいと思っています。 どなたか是非アドバイスお願いいたします。

  • VBscriptで「改行」と「"」を置換させる

    VBスクリプトを使ってファイルを置換したいと考えています。 以下のVBSファイルとコマンドを使って、置換することはできました。 が、置換対象が「改行」と「"」の場合、エラーとなって置換できません。 どうすればいいのでしょうか。 よろしくおねがいします。 ********コマンド******** (1)cscript replace.vbs "C:\test.txt" "Jim" "Jane" (2)cscript replace.vbs "C:\test.txt" ""_\n" "a_test" ********VBSファイル(replace.vbs)******** Const ForReading = 1 Const ForWriting = 2 strFileName = Wscript.Arguments(0) strOldText = Wscript.Arguments(1) strNewText = Wscript.Arguments(2) Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strFileName, ForReading) strText = objFile.ReadAll objFile.Close strNewText = Replace(strText, strOldText, strNewText) Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) objFile.WriteLine strNewText objFile.Close (1)のコマンドを実行すると、 「Jim」は「Jane」に置換されますが、 (2)のコマンドを実行すると、エラーになり置換されません。 エラーメッセージ: 「Microsoft VBScript 実行時エラー: インデックスが有効範囲にありません。」 よろしくおねがいします。

  • ファイル名の一部をそのファイル内に置換したい(もしくは連番)

    ファイル名の一部をそのファイル内に置換したいのですが、何か方法はありますでしょうか?(複数ファイル処理で) もしくは置き換えた文字の後ろに連番をつけていきたいのですが。秀丸エディタをよく使用しているのですができないようでベクターなども調べましたが見つかりませんでした。 例:sの後ろの数字を置き換えたとき ファイル名: テスト_s23_p43.txt ファイル内容: 置換前 No, 0 置換後 No, 23

専門家に質問してみよう