• ベストアンサー

UTF-8のTextファイルの置換

UTF-8で記述されたファイルをVBにて置換しようとしております。 置換する文字は、Tab→空白4個と"><"の間に改行を入れる置換を しようとしております。 AtEndOfStreamで読み込んで置換するのではないかと思うのですが それ以上が分かりません。 ご教授いただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

VBのバージョンは? バージョンによって劇的に回答が変わります。 今後は明記するように気をつけてください。 出来れば他の方々も。 …VB6だと私は分かりません。 文字コード指定で読み書きは…FSOとか使ってもたぶん出来ないですよね… (正直、FSO使ったこと無いんだけど) 最悪、バイナリとして読み込んで無理やり編集することになるかも? (何かやり方があるような気は しますが…) VB.NET(調べたのは2005)だと、 ・Encodingを指定してStreamReaderを使って読み込み ・普通にString.Replaceメソッド等で必要な変換を行う ・Encodingを指定してStreamWriterで書き込み …という手順で可能と思います。 以下の内容あたりをヘルプで調べながらやってみてください。 ・StreamReader コンストラクタ (String, Encoding) ・StreamReader メンバ ・String.Replace メソッド (String, String) ・StreamWriter コンストラクタ (String, Boolean, Encoding) ・StreamWriter メンバ ・Encodingクラス (System.Text) 少しだけヒントを書いておくと、StreamReader等で指定する「Encoding」は System.Text.Encoding.utf-8 でいけると思います。

men_tan
質問者

お礼

お礼が遅れてすみません。 VB6だったのですが、VB.Netにして教えていただいた方法を参考にして何とか作成することが出来ました。 ありがとうございました。

その他の回答 (2)

回答No.3

ANo.2です。 しまったすみません、 utf-8 じゃなくて UTF8 のようですね。 失礼しました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>読み込んで http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard30.htm >Tab→空白4個と"><"の間に改行を入れる IndexOfメソッドを調べてみては? 文字列から"><"の位置を取得する。 Substringメソッドで取得した位置を基に文字列を分ける。 その際にControlChars.NewLineで改行する。 上記はVBをVB2005として回答してみました。 (実際には検証してないんですが。。。) 他のバージョンでは違うかも知れません。 ご参考になれば。

関連するQ&A

  • テキストファイル中の文字列の置換

    読み込んだテキストファイルに中にある文字を別の文字に置換後、置換したファイルを再度保存したいと考えています。 どのようにすれば良いのでしょうか? VB6を使用しています。 宜しくお願いします。

  • 複数ファイルを一挙に置換したい(UTF-8)

    OS:Windows UTF-8で書かれた複数のテキストファイルの中身を、一括で置換したいです。これまで使っていたツール(textSS)だと文字化けを起こしてしまうので、文字化けが起きないツールを探しています。

  • カンマ形式のテキストファイルの置換

    テキストファイルの変換に困っています. 1,2,3,4 5,6,7,8 というデータを 1 2 3 4 5 というように置換操作でカンマ→改行にしたいと 思っています. ・秀丸の場合 ,→\n(改行文字)でできます. でもメモ帳の場合は\nのようなエスケープシーケンス は使えません メモ帳で置換後の文字列を改行にしたいのですが どのようにしたらいいでしょうか?教えてください メモ帳でだめならエクセルではできないでしょうか?

  • テキストファイルを直接置換する方法

    VBAに関する質問です。 複数のテキストファイルを読み込んで 指定した文字列を別の文字列に検索・置換してくれるプログラムを作りたいと考えています。 これをするためには一度 Set MyTxt = FSO.OpenTextFile(StrPath, 1) Do While MyTxt.AtEndOfStream = False hairetu(xxx) = MyTxt.ReadLine loop のようにしてテキストデータを全て配列に読み込み、 Replace関数で一つずつ検索・置換した後に Open StrPath For Output As #1 Print #1, hairetu(xxx) のようにしてファイルを出力し直すしかないですか? 配列に読み込まずに 既存のファイルを直接編集する方法を教えてください。

  • テキストの読み込みと置換について

    どなたかご教授ください。 VBでテキストファイルを読み込ませ、指定した部分を置換させて、保存したいのです。そんなことできますか。よろしくお願いします。

  • テキストファイルで改行に置換したい

    テキストファイルで、「(オプション),」の後ろに改行を入れたいです。 置換を試しているのでうがうまくできないので教えて下さい!

  • テキストファイル内の改行について

    お助け願います。 VB6にてあるテキストファイルを読み込んでいます。 このテキストファイルは普通にノートパッドで開くと、 1行が1024文字で開かれてしまいます。 秀丸などで開くと、改行がうまくいき必要なデータの並びになります。 VB6からこのテキストファイルを開いて読み込む際にも、 秀丸のような改行で読込みたいのですが、できるのでしょうか? ノートパッドでも秀丸のような改行で開くことは可能なのでしょうか? ご教授下さい。 例) ノートパッドで開くと 1234567890123456789012345678901234567890 秀丸で開くと 1234567890 1234567890

  • ファイル内の文字列を置換

    掲示板利用させていただきます。 現在、ファイル内の特定の文字列を置換し、 保存する方法を探しています。 できればスクリプト言語を利用したいと考えています。 sedコマンドを使用して文字列置換を行ったのですが 置換前と置換後のファイルで 文字コードと改行コードが変わってしまうのでダメでした; 「ファイル内の特定の文字列を任意の文字列に置換し、置換前と置換後で改行コードと文字コードを変えない方法」 をご存知の方、ご教示ください。 bash,perl,javaのどれでも結構です。 よろしくおねがいします。

  • テキストデータなのですが、

    途方に暮れてます。教えて下さい。 VB6にて、テキストファイルを読み込みます。 改行の部分はReplace(テキストファイル, vbLf, vbNewLine)として、 改行しました。(私はバイナリの扱いをほとんど知りません) 次に問題となったのが、バイナリエディタで見てみると、00という空白 文字です。(ドットかはっきりわからないのですが、.となってます) この空白文字を素直に空白文字としたいのですが、空白が削除されて 変換されます。 前 ABCDEF 後ABCDEF といった感じです。 そのままの状態で改行のように、空白文字を変換したいのですが、 どうすればよいでしょうか? 私自身、バイナリについてわかっていないので、内容がわかりにくい と思いますが、どうぞよろしくお願いします。

  • UTF-8のテキストファイルを開く方法

    UTF-8のテキストファイルを開く方法 こんにちは。VBA初心者です。 FSOを使ってテキストファイルを開いてみたのですが、S-JISで開かれるらしく、文字化けしてしまいました。 そこで、WEBで調べてみると「ADODB.Stream」というものを使用すると、「オブジェクト.Charset = "UTF-8"」のように文字コードを指定できることがわかりました。 しかし、テキストストリームというものがいまいち理解できていないので使い方がよくわかりません。 以下のようなコードを書いてみましたが、「実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません。」となってしまいました。 どこが間違っているのか教えていただけないでしょうか。 ちなみに「Open」ステートメント(Open バス名 For モード As #ファイル番号)を使用してテキストを内部的に開いた場合はどうなるのでしょうか。もし、標準でS-JISだった場合は、UTF-8にする方法はあるのでしょうか。 どうかよろしくお願いします。 Sub UTF8を開く() Dim myADODB As Object Set myADODB = CreateObject("ADODB.Stream") Dim i As Integer Worksheets("sheet1").Activate i = 1 With myADODB .Charset = "UTF-8" .ReadLine ("D:\test\sample.txt") Do Until .AtEndOfStream = True Cells(i, 1).Value = myADODB i = i + 1 Loop .Close End With End Sub

専門家に質問してみよう