- ベストアンサー
vbsで文字列内の改行コードを置換もしくは削除
- ある帳票作成ソフトにCSVを渡して帳票を作成するのですが、カンマで区切られた文字列内に改行コードが存在すると、CSVの区切りを判定してくれず(改行とみなされてしまう)、うまく帳票を出力してくれません。
- vbsで改行コードを削除、もしくは何か違う文字に置き換えしようと思うのですが、vbsにはうといためよくわかりません。どなたかご教授してもらえないでしょうか?
- やりたいことは元のCSVのカンマで区切られた文字列内に存在する改行コードを置換もしくは削除することです。文字コードはUTF-8です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ご質問の趣旨からすると、何やら、WEBフォーム や WEBメール から CSVファイル に蓄積された データ をそのまま「ある帳票作成ソフト」に回しているという イメージ なのですが、こういう場合、考え方として次の2つが考えられるかと存じます。 1)「WEBフォーム や WEBメール から CSVファイル に蓄積」する時点で、項目区切りの改行以外(つまり、1つの項目の中での筆者の意図的な改行 =「<改行コード>」)を、一旦、別の文字に置き換えてから、「CSVファイル に蓄積」し、「ある帳票作成ソフトにCSVを渡して帳票を作成する」タイミング で、再度「改行コード」に変換する。 2)例えば、各行の頭に「氏名」・「住所」・「電話番号」などの決まった キーワード がある場合は、その キーワード を頼りに、CSVファイル を全文読み込んだ後に、先ず、キーワード で行を分割する。 一口に「改行コード」と言いましても、 vbCr = Chr(13) = キャリッジ リターン文字 vbLf = Chr(10) = ライン フィード文字 vbCrLf = Chr(13) + Chr(10) = キャリッジ リターンとライン フィードの組み合わせ vbNewLine = Chr(13) + Chr(10) または Chr(13) などがあるのでしょうから、例えば、「【1行目】」と「【2行目】」との間の改行は「vbCrLf」だけれども、「<改行コード>」の部分は「vbCr」である、というようなことでしたら、単に Replace(buf, vbCr, "@") みたいなことでイケルと思われ勝ちですが、実際には「vbCr」が「@」に置換された分、「vbCrLf」も「vbLf」に変わってしまいますので、注意が必要です。 ということで、ダラダラと書きましたが、実際に tsutomu0629 さんの眼の前にある「CSVファイル」が、「どんな材料を元に」・「どのようにして作られた」・「どのような内容の」ファイル かによって、操作も変わってくるのではないかと存じます。 先ずは、その辺のところを踏まえて、tsutomu0629 さんご自身で、方法論をお考えになってみてください。 とりあえず、 '-------------------------------------- Option Explicit Dim objFSO, buf Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") With objFSO.OpenTextFile("D:\hoge.csv") '← 実際の CSV buf = .ReadAll .Close End With buf = Replace(buf, vbCrLf, "vbCrLf") buf = Replace(buf, vbCr, "■") buf = Replace(buf, vbLf, "●") buf = Replace(buf, "vbCrLf", vbCrLf) With objFSO.CreateTextFile("D:\hoge.csv") '← 実際の CSV .WriteLine buf .Close End With WScript.Echo buf '-------------------------------------- を実行してみられて、「<改行コード>」のところが、すべて「■」か「●」で表示されるようでしたら、とても ラッキー です。 #なお、「文字コードはUTF-8です」は見なかったことにさせていただきます。