Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


29717 / 76732 ←次へ | 前へ→

【52290】Re:OpenAsTextStreamで、テキストファイルの特定の文字列に文字を追加したい
発言  ichinose  - 07/11/5(月) 19:42 -

引用なし
パスワード
   皆さん、こんばんは。

沢山アドバイス投稿があったでお任せしようかなあ
と思いましたが、正規表現の箇所を少し汎用的にしたので
投稿します。

新規ブックの標準モジュールに

'============================================================================
Sub main()
  Const infile = "infile.txt"
  Const otfile = "infile.tmp"
  Dim s As String
  Dim intxt As Object
  Dim outtxt As Object
  Dim fso As Object
  Set fso = CreateObject("scripting.filesystemobject")
'**************************************************************************
  
  Call mk_sample_txt(ThisWorkbook.Path & "\" & infile, fso)
  MsgBox infile & "をサンプルファイルとして、作成しました"
  Set intxt = fso.OpenTextFile(ThisWorkbook.Path & "\" & infile)
  MsgBox "ファイルの中身は" & vbCrLf & vbCrLf & intxt.ReadAll & _
      vbCrLf & vbCrLf & "です"
  intxt.Close
  
'****************************************************************************
  MsgBox infile & "の編集を開始します"
  
  Set intxt = fso.OpenTextFile(ThisWorkbook.Path & "\" & infile)
  Set outtxt = fso.CreateTextFile(ThisWorkbook.Path & "\" & otfile, True)
  Do Until intxt.AtEndOfLine = True
    outtxt.WriteLine myreplace(intxt.ReadLine, "^CREATE TABLE ""[^""]+", "P", 1)
    Loop
  intxt.Close
  outtxt.Close
  fso.DeleteFile ThisWorkbook.Path & "\" & infile
  fso.GetFile(ThisWorkbook.Path & "\" & otfile).Name = infile
'**************************************************************************
  
  MsgBox "新しい" & infile & "ファイルを作成しました"
  Set intxt = fso.OpenTextFile(ThisWorkbook.Path & "\" & infile)
  MsgBox "ファイルの中身は" & vbCrLf & vbCrLf & intxt.ReadAll & _
      vbCrLf & vbCrLf & "です" & vbCrLf & _
      "○○○○の後に「P」を追加されていますね!!"

  intxt.Close
  Set intxt = Nothing
  Set outtxt = Nothing
  Set fso = Nothing
End Sub
'=================================================================
Function myreplace(mystr As Variant, pat As Variant, rstr As Variant, Optional rtype As Long = 0) As Variant
'  機能 : 文字列mstrから、patで指定された文字列を見つけ出し、rtypeの指示により、
'      文字列rstrで置換したり、追加した文字列を返す
'  input : mstr  探索対象文字列、pat メタ文字列、 rstr 置換または、追加文字列
'      rtype 0--patで取得した文字列をrstrで置換する
'         1--patで取得した文字列にrstrを追加する
'  output:myreplace-mstrの編集後の文字列
  Dim matches As Object
  Dim mm As Object
  myreplace = mystr
  With CreateObject("VBScript.RegExp")
    .Pattern = pat
    .IgnoreCase = True
    .Global = True
    Set matches = .Execute(mystr)
    For Each mm In matches
      .Pattern = mm.Value
      If rtype = 0 Then
       myreplace = .Replace(mystr, rstr)
      Else
       myreplace = .Replace(mystr, mm.Value & rstr)
       End If
      Next
    End With
End Function
'============================================================================
Sub mk_sample_txt(ByVal flnm As Variant, ByVal fso As Object)
  Dim txtstrm As Object
  Set txtstrm = fso.CreateTextFile(flnm, True)
  txtstrm.WriteLine String(16, "あ")
  txtstrm.WriteLine String(29, "A")
  txtstrm.WriteLine "CREATE TABLE ""○○○○"" ("
  txtstrm.WriteLine "CREATE TABLE ""BBBBBB"" ("
  txtstrm.WriteLine String(17, "い")
  txtstrm.Close
  Set txtstrm = Nothing
End Sub


として、一度保存した後に

mainを実行してみてください。

サンプルテキストファイルとして 上記のマクロを含むブックと同じフォルダに

infile.txtとして、

ああああああああああああああああ
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
CREATE TABLE "○○○○" (
CREATE TABLE "BBBBBB" (
いいいいいいいいいいいいいいいいい

というデータを作成します。

このデータを

ああああああああああああああああ
AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
CREATE TABLE "○○○○P" (
CREATE TABLE "BBBBBBP" (
いいいいいいいいいいいいいいいいい

に変更しています。

前にもどこかで記述しましたが、
文字列の編集は楽しみながらやりましょう!!
色んなやりかたがありますから・・・。


試してみてください。

1 hits

【52163】OpenAsTextStreamで、テキストファイルの特定の文字列に文字を追加したい moto 07/10/26(金) 0:04 質問
【52164】Re:OpenAsTextStreamで、テキストファイル... ichinose 07/10/26(金) 8:29 発言
【52182】Re:OpenAsTextStreamで、テキストファイル... moto 07/10/26(金) 22:42 お礼
【52233】Re:OpenAsTextStreamで、テキストファイル... moto 07/11/2(金) 0:50 質問
【52235】Re:OpenAsTextStreamで、テキストファイル... ichinose 07/11/2(金) 8:36 発言
【52275】Re:OpenAsTextStreamで、テキストファイル... moto 07/11/4(日) 21:22 質問
【52278】Re:OpenAsTextStreamで、テキストファイル... neptune 07/11/4(日) 23:04 発言
【52280】Re:OpenAsTextStreamで、テキストファイル... moto 07/11/5(月) 0:07 質問
【52283】Re:OpenAsTextStreamで、テキストファイル... りん 07/11/5(月) 1:15 発言
【52290】Re:OpenAsTextStreamで、テキストファイル... ichinose 07/11/5(月) 19:42 発言
【52301】Re:OpenAsTextStreamで、テキストファイル... moto 07/11/7(水) 0:27 お礼
【52314】Re:OpenAsTextStreamで、テキストファイル... moto 07/11/8(木) 0:20 お礼

29717 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free