• ベストアンサー

VBAで外部ファイル(HTMLソース)を読み込んで書き込む時の問題

下記のように外部ファイルを読み込んで、編集してまた別ファイルに書き込むという作業を行っております。 ************* ファイルオブジェクト略 ************* 1:Open "test.html" For Input Shared As #1 'テキストファイルを開く 2:Do While Not EOF(1) 'ファイルの終端まで繰り返す 3:Line Input #1, strBuf 'テキストファイルより1行を読み込む 4:tf.write strBuf '読み込んだ1行のデータ行を追加する 5:Loop 6:Close #1 'テキストファイルを閉じる 4行目で実際読み込んだデータを書き込んでいるのですが、 書き込んだ後のHTMLファイルソースをみると改行されずに データが入っています。 <例> <HTML><HEAD><TITLE>***</TITLE></HEAD><BODY> "\n"的な改行コードをいれるにはどうすればよろしいでしょうか? よろしくお願いいたします。

  • fm0606
  • お礼率13% (100/761)

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

  • ベストアンサー
  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.1

writeで出力すると、自分で改行コードを付ける必要があります。 writeの代わりにwritelineで出力すると出力毎に改行されるはずです。 試してみてください。

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。 > 4:tf.write strBuf '読み込んだ1行のデータ行を追加する この tf というのが、File System Object の Text Stream なら #1 ご回答のとおりです。 余計なお世話かもしれませんが、折角 File System Object を使っている なら、テキストを開く部分でも従来の Open ステートメントではなく、 Text Stream をもう一つ用意すれば良いのでは? File System Object か Open ステートメントか、どちらかに統一した方が 良いと思います。 また、長くなるので下記ソースではやってませんが、ファイル入出力処理 はエラー発生時でもちゃんとファイルを閉じる処理を書いた方が良いです。 Sub Sample()   Dim Fso  As Object ' FileSystemObject   Dim TS_Src As Object ' TextStream   Dim TS_Dst As Object ' TextStream   Dim strBuf As String   Dim i   As Long   Dim strSrcFilename As String   Dim strDstFilename As String       Const ForReading = 1  ' 参照設定してあるなら不要   Const ForWriting = 2  ' 参照設定してあるなら不要   Const ForAppending = 8 ' 参照設定してあるなら不要      strSrcFilename = "C:\Sample.txt"   strDstFilename = "C:\Output.txt"        Set Fso = CreateObject("Scripting.FileSystemObject")   ' 読み取りモードでソースファイルを開く   Set TS_Src = Fso.OpenTextFile(strSrcFilename, ForReading)   ' 書き込みモードで出力ファイルを開く(ファイルがなければ自動で作成する)   Set TS_Dst = Fso.OpenTextFile(strDstFilename, ForWriting, True)   While Not TS_Src.AtEndOfStream     strBuf = TS_Src.ReadLine     ' 編集(サンプル用に試しに行番号を追加してみる)     i = i + 1     strBuf = Format$(i, "0000: ") & strBuf     ' 一行書き出し     TS_Dst.WriteLine strBuf   Wend      TS_Src.Close: Set TS_Src = Nothing   TS_Dst.Close: Set TS_Dst = Nothing   Set Fso = Nothing End Sub

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 出力の形が良く見えてこないのですが、 Open [ファイル名] For Output As #2 はお使いにならないようですね。 tf は、FilesystemObject のようですね。 >"\n"的な改行コードをいれるにはどうすればよろしいでしょうか? "\n"「的」というのは、Unix ライクやMac ライクを意味するのでしょうか? Winだったら、& vbCrLf または、& Chr(13) & Chr(10) Mac なら、& vbCr または、& Chr(13) Unix なら、& vbLf または、& Chr(10) ということになるかと思います。

関連するQ&A

  • VBAでテキストファイルを最後まで読み込みたい

    テキストファイル内の文章を最後まで読み込みたいのですが、 do  Line Input #1, gyou  処理1 while 条件 で、条件はどのような記述にすればいいのですか? テキストファイルには、改行コードのみの行や、スペースのみの行が混在しています。 また、行数も常に変動するので、 for~nextで予め回数を指定することも出来ません。

  • CSVファイルデータ0件時の改行コード

    CSVファイルのデータが0件のとき、そのCSVファイルをテキストエディタで開くと、1件目に改行コードが設定されています。 CSVファイルデータ0件のとき、改行コードを削除することは出来るのでしょうか? テキストエディタで開いた場合、「EOF」が1件目になるようにしたいのですが。。。。

  • textarea形式のフォームで複数行入力したテキストデータを保存すると、複数行のデータができてしまう現象を回避する方法

    「テキストファイルのデータを読み込み、html画面のフォームに表示させ、データを修正後、元のテキストファイルに書き戻す」というCGIを作成中です。 テキストファイルのデータの並びは決まっていて、例えば3番目のデータが「名前」4番目のデータが「住所」だったりします。 ここで、複数行の入力が必要なフィールドをが必要となり、"textarea"形式のフォームを設定したところ、複数行のインプットをすると、テキストファイルにも複数のデータができてしまいました。2行のデータをインプットすると、データも2行になってしまい、後のデータがずれてしまいます。 そこで「複数行のテキストデータを、改行マークをつけたまま、1行のデータとして保存し、読み込んでtextarea 形式のフォームに表示させるときは、改行されて表示する」という処理が実現できるよう、時間をかけて調べておりますが未だ判らない状態です。  ご存じの方がいらっしゃいましたら是非教えて頂きたく、宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • HTMLファイル内の実際の改行(<BR>ではなく)を一括消去する方法

    HTMLファイル内に存在する「改行」を全て削除する方法、フリーソフトなどはあるのでしょうか? 「改行」とは<BR>タグではなく、目で見える、実際に行が変わっている箇所の事です。 可能な場合、その操作を複数のHTMLファイルで一括で行いたいのですが可能でしょうか? このような質問をする目的は、複数(約3000)あるHTMLのファイル(ホームページビルダーにて作成したものです)を、Excelの一行に対して一つのHTMLファイルを入れていきたいのです。 つまり、3000あるHTMLファイルを、Excel(アクセスでもテキストエディタでも可)で3000行分にしてしまいたいのです。 宜しくお願いいたします。

  • 外部ファイルを読み込んで表示

    これが外部ファイル(CheckUtil.js)です。 //入力データ(テキストデータやテキストエリア)の必須チェック function requiredCheck(strVal,strErr) { if(strVal=="" || strVal==undefined){ return strErr + "は必須入力です \r"; }else{ return ""; } } これを読み込んで表示させたいです。 <HTML> <HEAD> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=sjis"> <TITLE>ファイル操作</TITLE> <!-- {literal} --> <script language="JavaScript" src="CheckUtil.js"></script> <script language="JavaScript"> </HEAD> <BODY> <!-- function chk(part){ strErr = ""; strErr+ = requiredCheck(part.value,"なまえ"); if(strErr == ""){ return true; }else{ window.alert(strErr); return false; } } //--> </script> <!-- {/literal} --> <BR> <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" name="fm" onsubmit="return chk()> <INPUT TYPE="text" NAME="name" SIZE="40"><BR> <INPUT TYPE="text" NAME="comment" SIZE="40"><BR><BR> <INPUT TYPE="submit" NAME="submit" VALUE="ボタン" onsubmit="return chk()"><BR> </FORM> <BR><BR> </CENTER> </BODY> </HTML>

  • VBA-読み込んだテキストファイルを並び替えて書き出したい

    VBA-読み込んだテキストファイルを並び替えて書き出したい ch1=FreeFile Open A for Input as ch1 ch2=FreeFile Open B for Input as ch2 DO while Not EOF(ch1) Line Input #ch1,buf Print #ch2,buf Loop Close #ch1,#ch2 で読み込み、書き出すことはできました。 やりたいことは、書き出す時に、項目を並べ替えたいのです。 例 にんじん りんご ねこ だいこん バナナ いぬ ↓ りんご ねこ にんじん バナナ いぬ だいこん よろしくお願いいたします。 区切りはタブです。

  • HTMLソースファイルからタグを取り除く方法

    HTMLソースファイルから、タグを完全に取り除く手法やモジュールを教えてください。 イメージとしましては、インターネットブラウザ上のHTMLページに対し <全選択→コピー→テキストファイルに貼り付ける> といった作業に類似したことをしたいです。 s/<.*?>//; を用いた削除では、本質問3行目のような表現も削除してしまい、 またブラウザを用いた手動の方法では、大量のファイルを処理しきれず困っています。 どなたかよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 【VBA】テキストファイルを指定行数からの読み込み

    こんばんは。 EXCEL VBAでテキストファイルを読み込む事について質問です。 VBAでテキストファイルをこちらから指定する行数(上から何番目という感じで)からデーターを読み込みたいのですが、どの関数をつかっていいかわからず困っています。 1行ずつ読みこむ「Input Line関数」では、無駄な行まで読み込むので動作が遅くなります。 読み込みたい行はすでにわかっているので、最初からその行に飛んでからデーター読み込みたいと思ってます。 ちなみに指定する行数は、ファイルによって違います。 あらかじめ「Input Line関数」で、ある文字が何行目にあるかを探す行為をあらかじめ行っています。 みなさまのアイデアを拝借したく、よろしくお願いします。

  • ロード時に外部ファイル読込

    お世話になっております。 onload時に外部ファイルのJavaScriptを呼び出したいのですがうまく動作しないので、 ここをお借りしてご質問させていただきます。 長いソースを抜粋しています。 【HTML】 <HTML> <HEAD> <script type="text/javascript" src="java.js"></script> </HEAD> <BODY onload="Check(Document.myFORM)"> <FORM name="myFORM">   <input name="ATEXT" type="text"> </FORM> </BODY> </HTML> 【java.js】 function Check(oj){  oj.ATEXT.disabled = true;  oj.ATEXT.style.backgroundColor = "#999999"; } 実際はテキストボックスがたくさんあり、HTML内に書くと ごちゃごちゃしてしまうため外部ファイルに記述しています。 しかし、動作させてみると「Documentは宣言されていません」というエラーが発生してしまいます; どうかご教授お願いいたします。

  • 続・EOF判定されない

    前回「EOF判定されない」で回答、アドバイスしていただいた a-kumaさん、Haizyさん、inthefloiさん、anisolさん、leaz024さん、cherry-moonさん 本当にありがとうございました。頂いたアドバイスを試行してみましたが、なぜか、ダメでした。(T-T) 環境が悪いのかもしれませんね。 あれから、feof関数を使わずにファイルの終わりを算出して判定するなどの方法を試みましたが、EOF判定だけのために妙に複雑になってしまい、自分でも納得がいかなかったので、再度こちらで皆さんの意見をもらおうと投稿させてもらいました。 今回は質問の仕方を変えて、モジュールの仕様を挙げますので、それから「自分ならこうする」というようなお答えを頂けたらと思っています。 feof関数を使用しても、その他の方法でもなんでもアリです。(^^) 「ファイル一行入力モジュール」(仕様) 1.このモジュールは実行されると「inputfile.txt」から一行だけ(改行まで)読み込み、終了します。次に実行された時は、その次の行を読み込みます。 2.ファイルの終端に達したら、リターンコードに'4'を設定し、終了する。 以上これだけ。(^^; 「inputfile.txt」(仕様) インプットファイルは、テキストファイルで、一行30バイトの文字列を格納しています。ファイルの総バイト数は不定です。 文字コードは「Shift-JIS」「改行=CR+LF」、ファイルの最後にEOF制御文字を設定しています。 「インプットファイルの内容」  1行目 AAAAAAAAAABBBBBBBBBBCCCCCCCCC[改行文字]  2行目 DDDDDDDDDDEEEEEEEEEEFFFFFFFFF[改行文字]           ・           ・           ・ n-1行目 XXXXXXXXXXYYYYYYYYYYZZZZZZZZZ[改行文字]  n行目 [EOF] 「ここはこうしたらいいんじゃないかな?」的な事でかまいませんので、是非みなさんの意見を聞かせてください。

専門家に質問してみよう