ダブルクォーテーション付きの文字列を含むファイルを読み込む方法

このQ&Aのポイント
  • Visual Basic 2008 Express Editionを使用して、ダブルクォーテーション付きの文字列を含むファイルを読み込む方法について教えてください。
  • 保存されたファイルには、時間と文字列が記録されています。しかし、文字列にダブルクォーテーションが含まれているため、正しく読み込めません。
  • ダブルクォーテーションを含む文字列を扱う方法について、具体的な処理方法を教えてください。
回答を見る
  • ベストアンサー

ダブルクォーテーション付きの文字列を含むファイルを読み込む方法?

Visual Basic 2008 Express Editionを使用しています。 IE上の範囲選択のHTMLテキストをテキストファイルに保存しています。 保存日時(Date型):time "文字列":moji のように保存しています。 FileOpen(n, "Data.dat", OpenMode.Append)  WriteLine(n, time, moji) ~保存されたファイルの例~ #2008-08-31 10:21:05# , "この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームが表示されます。通常のご質問、ご意見等は<A href=""/vb/bbs/index.html"">掲示板</A>へご投稿ください。 " このファイルを以下のように読み込もうとしています。 FileOpen(n, "Data.dat", OpenMode.Input) Do While Not EOF(n) Input(n, time) Input(n, moji) TextBox1.Text += vbCrLf & time & vbCrLf & moji & vbCrLf Loop  ところが、HTMLの文字配列の中には、<a href="" http://・・・・ "">のようにダブルクォーテーションが含まれています。ダブルクォーテーションが2つなら、文字列として扱ってもらえると思っていましたが、文字列の終了位置として認識してしまうようです(エラーの内容から判断しました。) ダブルクォーテーションを含む文字列の場合どのように処理したらよいでしょうか?

  • liefu
  • お礼率25% (1/4)

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

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

あの?。聞きたいんだけど。 最終的な結論から言うと、どうもウエーブのページを時刻とページ内容を対にして 保存しているみだいですね。一種のログファイル的な考え方と思っていいですか?。 その時にウエーブのページの内容によって ファイルに保存した時に vbCrLf が入る みたいで、それで今度読み込みする時に困るとの事。vbCrLf が途中に入っていな いなら、私の答えた内容で綺麗に読めるはずです。 FileOpen(1, "C:\sbj\aaaa.txt", OpenMode.Input) Do While Not EOF(1)   time=Input(1)       こちらを Input で   moji=lineInput(1)     こちらを LineInput で Loop そこで、ウエーブのページを保存する時にvbCrLfが入らない様にすればいいのだけど。 ここで考えられるのは、ダブルクォーテーションがついている内容を保存した変数を ファイルに書き込む時に、VBが勝手にvbCrLf をつけて保存する事はないと思うが?。 恐らく想像だが、ダブルクォーテーションがついている内容を保存した変数をファイル に書き込む時点でvbCrLfがつくのではなくて、ファイルに書き込む以前に、既に そのダブルクォーテーション文字を含んだ変数の中にvbCrLfの文字があるのでは?。 書き込む前に変数にvbCrLfがあれば、vbCrLfも同時に書き込まれます。 本来、ウエーブページの内容は、vbCrLfがページ内に含まれていても、無視されて 改行しない様になっており、ウエーブページの改行は<br>だった様に思う。 むしろ、ウエーブページの内容はいたる所にvbCrLfが入っている可能性が大であり 、いくら入っていてもウエーブページにはなんら差し支えない様に出来ています。 それ故、ウエーブページの内容を時刻と対に保存する時は、保存する前にウエーブページ の保存してある変数から、vbCrLfを取り除いて保存するのが普通です。 そうでないとvbCrLfがどこに入るか分からなく、その後の読み込んで操作するプログラム の方で大変難しくなるからです。 ファイルに保存する前に 保存する変数を  変数=replace(変数,vbCrLf,"") として vbCrLf を取り除いて保存すれば vbCrLf は途中に入らない様に思うのですが?。一度試して頂けますか?

liefu
質問者

お礼

変数=replace(変数,vbCrLf,"") とすると、 改行がなくなり無事読み込むことができました。 私の質問に長くお付き合いしていただきありがとうございました。またよろしくお願いします。

その他の回答 (3)

回答No.3

ダブルクォーテーション付きの文字列を含むファイルを読み込む方法はとなっているので それなら、 FileOpen(1, "C:\sbj\aaaa.txt", OpenMode.Input) Do While Not EOF(1)   time=Input(1)       こちらを Input で   moji=lineInput(1)     こちらを LineInput で Loop でよいですと伝えています。ただし #2008-08-31 10:21:05#, 文字列(ダブルクォーテーションを含む) vbCrLF の形でファイルに保存されていないといけないが、上の形でファイルの中が落ちていないのですか? サンプルのデータは #2008-08-31 10:21:05# , "この記事に関するコメントを投稿するには、下のボタンをクリックしてください。投稿フォームが表示されます。通常のご質問、ご意見等は<A href=""/vb/bbs/index.html"">掲示板</A>へご投稿ください。 で、  #2008-08-31 10:21:05#,"この記事・・・ご意見等は<A vbCrLf  <===ここで改行  href=""/vb/bbs/index.html"">掲示板</A>へご投稿ください。  と文字列の途中で改行文字が入っていますが、この改行文字をどうこうするとの事なのですか? 上の読み込むファイルを作るソースがどの様になっているのかわかりませんが、 それは、元の読み込むファイルを作るソースの問題ではないのですか?。 質問内容からは、ダブルクォーテーション付きの文字列を含むファイルを読み込む方法はとなっているので その様に答えていますが。 それなら、質問内容は、ファイルを書き込む時に ダブルクォーテーションを含む文字列を書き込む時に 途中で改行文字が入るのを入らない様にしたいとの事ではないのですか?。

liefu
質問者

補足

ご回答ありがとうございます。 ご指摘の通り、WriteLineで時間(Date型)、文字列(String型)を保存していますが、テキストファイルを開いてみると、途中に改行文字が多く入っていました。 質問当初は、改行文字が入っていることには気づかず、input関数で読み込もうとしていましたので、いつもダブルクォーテーションのところでエラーが起こっていました。

回答No.2

時間と文字の2項目で読みたいことですか? それなら下の内容でどうですか?。 FileOpen(1, "C:\sbj\aaaa.txt", OpenMode.Input) Do While Not EOF(1)   time=Input(1)       こちらを Input で   moji=lineInput(1)     こちらを LineInput で Loop

liefu
質問者

補足

ウェブページのinnerHTMLを抜き出して文字列変数に入れていますが、テキストファイルに保存した段階で、改行文字が途中で書き込まれてしまうようで、それでうまくいきません。 以前教えていただいたlininput(1)だけで読み取りをしても、うまくいかなくなってしまいました。前はうまくいっていたような気もしましたが。

回答No.1

行単位で読み込みすれば、そのままダブルクォーテーション も読み取れます。 FileOpen(1, "C:\sbj\aaaa.txt", OpenMode.Input) Do While Not EOF(1)   cm=lineInput(1)   cm=lineInput(1) Loop

liefu
質問者

補足

ご回答ありがとうございます。 試してみましたところ、行単位で読み取れました。 ただ、質問分が少し曖昧だったため、少し目的のこととは違いました。  時間と文字列の配列をファイルに保存して、読み込むときもまた2つの変数に分けて読み込みたいと思っています。  ためしに、Writeで書き込んで、Inputで読み込んでみましたが、やはりダブルクォーテーションが含まれるとうまくいきませんでした。  また、回答文ではcm=linInput(1)を2行記されていますが、これは誤植だと思っていますがどうでしょうか? よろしくお願いします。

関連するQ&A

  • Excelに、ダブルクォーテーションで始まる文字列を貼り付けると、ダブルクォーテーションが消えること

    Excelで、ダブルクォーテーションで始まる文字列をセルに貼り付けたときに ダブルクォーテーションが消えるのですが、 Excelってもともと(標凖的な動作として)そういうものですか。 (F2キーを押すなりして)編集状態にして貼り付ければ、ダブルクォーテーションのついたまま貼り付くのですが、 私はセルを選択して貼り付けただけでも大丈夫だと思っていました。 「文字列を貼り付ける」というのは、例えばテキストエディタ上にあるものを手作業でコピーして貼り付ける、ということです。 「ダブルクォーテーションで始まる文字列」と言っても、 ダブルクォーテーションが3つ以上あったときに消えるのは、最初の1組(2つ)ですね。 しかし、 "AAAA"""BBBB のような場合には、なぜか AAAA"BBBB になるのです。 (ちなみに、この文字列を、質問直前の質問内容確認の画面(IE)でコピーしてExcelに貼り付けたときは、違います。) どのような規則に基づいてダブルクォーテーションが消えるのかも疑問です。 このような仕様になっている理由はなんでしょうか。 また、Excelに文字列を貼り付けるという操作を頻繁に行うため、 できれば、編集状態にしなくても、 セルを選択して貼り付けするだけで、そのままダブルクォーテーションも貼り付いてほしいのですが、 そのためにはどうすればよいのでしょうか。 「セルの書式設定」で、表示形式を文字列にすればよいと思ったのですが、だめでした。 セルには文字列を入れるだけで、数式を入れたりしません。 (数式としては扱ってほしくない、という意味です。) Excelは2000です。

  • 文字列に含まれているダブルクォーテーション( ")を置換する

    文字列に含まれているダブルクォーテーションを除きたいのですが、これをSubstitute関数で置換しようとしてもうまくいきません。ダブルクォーテーションが文字列を指定するために使われるせいだと思うのですが、"を文字列として指定する方法はあるのでしょうか? よろしくお願いします。

  • ダブルコーテーション付き文字列をファイルから読み込むには

    お世話になります。 ホストから出力されたファイルをVBで読込みたいのですが、文字列の中に「":ダブルコーテーション」が含まれます。 VBでopenすると2番目の「":ダブルコーテーション」で切れてしまい、EOFでループすると1レコードで何回もループしてしまします。 対処法等ありましたらご教授ください。 よろしくお願いします。

  • ダブルクォーテーションを文字列として扱いたい

     初心者な質問で申し訳ありませんが、ダブルクォーテーション("")を  文字列として扱いたいのですが、どうもうまくいきません。  SQLなどだと、escapeって関数がありますよね?  VBにはそれに似たような関数はあるのでしょうか??

  • 文字列として"(ダブルコーテーション)を表示させる方法

    こんにちは。文字列として、ダブルコーテーションを表示させるには、どうすればよいのか教えてください。m(__)m 例えば、 <font size="2">あいうえお</font> というタグの「あいうえお」の部分が、セルA1にあった場合、 ="<font size="2">"&A1&"</font>"という表示にしたいのです。 "2"のダブルコーテーションも文字列として表示させるには、どうすればよろしいのでしょうか。 教えてください。よろしくお願い致します。

  • エクセルでダブルコーテーションを消したい

    エクセルで文字列を入力すると必ずダブルコーテーションがついてしまいますが、これを消して保存するにはどうしたらいいのでしょうか?

  • エクセルで文字列をtxtファイルに変換すると""がつく

    テキストファイルを文字列の引用符は「なし」でエクセルの文字列で開き、加工して再びテキストファイルで保存すると、部分的に文字列に引用符("")がついてしまうのですが、この""(ダブルクォーテーション)をつけずにテキストで保存するにはどうしたらよいのでしょうか。

  • ダブルクォーテーションが置換できません

    いつもお世話になっております。 PHP初心者です。 シングルクォーテーションとダブルクォーテーションを文字列として入力したいと思い、以下のように記述しました。 -------------------------------------------------- $naiyo = $_POST['naiyo']; $search = array('\'','"'); $replace = array('\'\'','\"'); $naiyo2 = str_replace($search,$replace,$naiyo); -------------------------------------------------- シングルクォーテーションは置換された(文字列として表示された)のですが、ダブルクォーテーションは表示されず、ダブルクォーテーション以下の文字列が消えてしまいます。 置換ができていないというよりも、そもそもダブルクォーテーションが検索に引っかかってもいないようです。 どのようにすればダブルクォーテーションも置換できるか、お分かりの方がいらっしゃいましたらご教示ください。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 文字列の取得について

    Accessのモジュールを使ってある文字列から指定した文字数の文字列を取得しようとしています。 A:"あああああ" & vbcrlf B:"いいいいい" & vbcrlf C:"うううううう" & vbcrlf D:"えええええ" & vbcrlf A~Dまでフィールドがあり、vbcrlfは改行です。 この文字列に対して以下の処理を実行します。 (1)変数mojiにA & B & C & Dを代入 (2)mojiを全角に変換 (3)Left(moji,20)で左から20文字取得します。 (4)mojiをテキストボックスに登録します。 (5)入力チェック処理  ・フィールドサイズが20文字以内か?  ・全角で登録されているか? →登録後のイメージ ---------------- あああああ いいいいい ううううう ---------------- テキストボックスには全角でしっかり登録されているようにみえるのですが、 どうしても全角で登録してくださいというメッセージが表示されてしまいます。 うううううの次の改行を削除すると、メッセージはでなくなります。 この改行が半角になっているのでしょうか? アドバイスよろしくお願いいたします。

  • ダブルクオーテーション、シングルクオーテーション

    プログラミング 「"」  と 「'」 の違いについて プログラミングにおいてダブルクオーテーションとシングルクオーテーションは双方、「コンピュータに文字列と認識させる」記号だと思うのですが、プログラミング言語問わず " と ' に文字列を表す以外の特別な意味を持つケースは何かありますか? (文字列を表す以外の意味はありますか?)

    • ベストアンサー
    • Java

専門家に質問してみよう