• ベストアンサー

文字列からダブルクオートの削除

atonの回答

  • aton
  • ベストアンサー率47% (160/334)
回答No.4

 基本的には#3のkana-tanさんの方法でうまくいくと思うのですが,".." の中に ',' を含むような複雑な文字列を処理したい場合は,java.io.StreamTokenizer クラスを利用すると良いと思います。  このクラスには,quoteChar(int ch) というメソッドがあって,ch で指定した文字を引用符として解釈してくれます。この指定をしたあと,java.io.StreamTokenizer#nextToken() を使って次のトークンを読み込むと,<ch で指定した文字>の直後から,次に<ch で指定した文字>が現れる直前までを一つの文字列として読み込むことができます。

参考URL:
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/io/StreamTokenizer.html

関連するQ&A

  • ダブルクォートで囲まれた文字列の取り出し

    Windows環境でRuby 1.8.7を使用しております。 ----sample1.txt----- hoge"foo\"bar\"foo"hage"bar\"baz\"bar"hoge ------------------ ファイルから1行ずつテキストを読み込んで処理を行います。上のsample.txtの様な行を読み込んだ場合にダブルクォートで囲まれた部分 foo\"bar\"foo bar\"baz\"bar を取り出すのにはどの様な正規表現を用いればよろしいでしょうか? エスケープされたダブルクォートを除ける上手い方法がわかりません。 また、ダブルクォートで囲まれた部分が複数行にまたがる場合はどの様に処理をすれば良いでしょうか? -----sample2.txt----- hoge"foo \"bar\" baz" hage ---------------------- -----sample3.txt----- hoge"foo \"ba r\"baz" hage ---------------------- 最初の例のように1行の場合は File.foreach(file) do | line | …… end で良いのですが、複数行の場合には同じように単純には行きません。 ダブルクォートの数を数えて、奇数の場合は偶数になるまで次行をくっつける様な処理を考えているのですが、もっと適切な方法はありますか? 宜しくお願いします。

  • カンマ区切りのCSVファイルから""を削除したい

    初めて質問いたします 以下のような形式のCSVファイルがあります 例) 品名,数量,単価,金額 "りんご",1,150,150 "バナナ",10,200,2000 "メロン","1,000","2,000","2,000,000" 上記のように、品名にはダブルクォーテションがつき、 数量、単価、金額については桁区切りのカンマが発生する場合、ダブルクォーテーションで囲まれています 上記のようなデータを りんご,1,150,150 バナナ,10,200,2000 メロン,1000,2000,2000000 のように別ファイルへ出力するにはどのようにすればよいでしょうか? プログラムでの処理で、WSHを使ったものを教えていただけますと、幸いです よろしくお願いいたします

  • Excelでcsvやtxtで保存する時にダブルクォートが勝手に付く

    Excelで作ったデータにリンクがある時なのですが、csvかタブ区切りのtxtで保存すると勝手にダブルクォートが付いてしまいます。 勝手に入らない方法はないものでしょうか? 当方Excel2000です。 解決策をご存知でしたら、ぜひ教えてください!よろしくお願いします。 例:<A href="http://www.○○○.com" target="_blank">こちら</a> csvかタブ区切りtxtで保存して、テキストなどで開くと、 "<A href=""http://www.○○○.com"" target=""_blank"">こちら</a>" のような感じになってしまう。

  • 文字として, "を使用するCSVファイルの取り扱い

    題名の通り、文字として,(カンマ)、"(ダブルクォート)を使用するCSVファイルの取り扱いについて教えて頂きたいです。 読み込むCSVファイルの形式は以下の通りです。 ・項目の最初と最後には"が設定される ・項目内の,は文字として扱う 例:"5,000" 5の後の,は項目内に設定されている為、文字として扱う ・項目内に"を設定する場合は""と設定する ・レコードは改行コード単位 例:"A","5,000","B","C""D""" 1項目目:"A" 2項目目:"5,000" 3項目目:"B" 4項目目:"C""D""" 上記の様なCSVファイルを読み込み、項目を取得するにはC言語ではどの様に対応するべきでしょうか。 下記方法で対応出来そうですが、効率が非常に悪いと思われます。 (1)fgetsにて1行分のレコードを読み込む。 (2)取得したレコードに対して、カンマを指定してstrtokを実行し、,間の値を取得する。 (3)取得したカンマ間の項目のダブルクォートの数をカウントする。 (4)-1カウント数が偶数の場合 ,を区切り文字とし、取得した値を1項目として扱う。 (4)-2カウント数が奇数の場合 ,を文字とし、次のカンマ間の項目を取得し、連結する。 連結した値のダブルクォート数をカウントし、カウント数が奇数か偶数か判定する。 (5)上記処理をstrtok結果がNULLになるまで繰り返し、NULLが帰ってきたら次の行のレコードを読み込む。 (6)上記処理をEOFまで繰り返す。 以上、よろしくお願いします。

  • idから名称を取ったり、名称からidを取るクラス

    idと値を持ったリストがあります 例えば 100 りんご 200 みかん 300 バナナ といった具合です。 この時、インデックス0の、item(0) item(1) でコード100 値りんご は取れると思いますが、 インデックスをベースに探すのではなく、 「コード100の値は何か?」や「りんごのコードは何か?」を取得したいです。 今はhashtableなどを、index 0 からindexの最後までをループ処理で検索する処理で実現していますが、最初からそういうメソッドを持ったクラスはないものでしょうか?

  • 外部ファイルへの出力時に余計なダブルクオートを除去し、文字コードを指定する方法は?

    Excel2007のデータを行毎にhtmlファイルとして保存しようとしています。 そこで、2つ問題が解決できずにいますので、どなたかお力添えをお願いできますでしょうか。 (1) セル内に改行がある場合、ダブルクオートが追加されたデータがhtmlファイルに出力されてしまうので、余計なダブルクオートを取り除いた、セル内に記載されたままのテキストデータをhtmlファイルに出力したい ---データ例 (A1)ここから--- <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script type="text/javascript"> if (document.getElementById) { document.write("<st" + "yle type=\"text/css\">.j1 {display:block;}</st" + "yle>");} </script> </head> <body> ---データ例 (A1)ここまで--- ---データ例 (B1)ここから--- <p class="j1">見出し1</p> </body> </html> ---データ例 (B1)ここまで--- (2) htmlファイルの文字コードをutf-8で出力&保存したい 現在は Open "001.html" For Output As #1 Write #1, Cells(1, 1) Write #1, Cells(1, 2) Close #1 このような感じのコードに CreateObject("ADODB.Stream") や Charset = "utf-8" を組み込んでいる最中ですが、自力では解決しそうになく、質問させていただきました。 なお、実際に出力されるhtmlは50KBほどあり、ファイル数(=Excelの行数)も100を超えるため、できるだけメモリーを圧迫しない方法で解決できればと思います。 よろしくお願いいたします。

  • すみません。下記のソースで、

    すみません。下記のソースで、 foreach ($value as $key2 => $value2) { の部分ですが、 こちらは、DBから拾ってきた値において、 "を""にしていますが、 DBから拾ってくると、通常"になっているのでしょうか。 また、"を""にする理由はなんでしょうか。 そのあとの$csv_outputで""で囲むようにしているので、 不要な処理ではないのかなと思いました。 //アンケートのデータを削除されていないデータをすべて取得(取得順はデータ登録日順 $sql = "SELECT * FROM anq_t WHERE del_flag != '1' ORDER BY create_datetime DESC"; } $anq_list = $db->getAll($sql,DB_FETCHMODE_ASSOC); //CSVの最初の行を項目名をセットする $csv_output = "\"回答日時\",\"名前\",\"性別\",\"年代\",\"好きな動物\",\"コメント\"\n"; //アンケートデータのCSVを作成する foreach ((array)$anq_list as $key => $value) { // 1行づつ受け取ったデータ($value)をそれぞれのフィールドごとに展開して文字列内のダブルクォートを二重にする foreach ($value as $key2 => $value2) { $value[$key2] = str_replace('"', '""', $value2); } $csv_output .= "\"" . $value["create_datetime"] . "\","; $csv_output .= "\"" . $value["name"] . "\","; $csv_output .= "\"" . $sex_value[$value["sex"]] . "\","; $csv_output .= "\"" . $age_value[$value["age"]] . "\","; $csv_output .= "\""; $tmp_animal = explode(",",$value["animal"]); foreach ((array)$tmp_animal as $tmpkey => $animalno) { $csv_output .= $animal_value[$animalno] . " "; } $csv_output .= "\","; $csv_output .= "\"" . $value["comment"] . "\","; $csv_output .= "\n"; } //CSVファイルとして出力する Header("Content-disposition: attachment; filename=anq_data.csv"); Header("Content-type: application/octet-stream; name=anq_data.csv"); print mb_convert_encoding($csv_output, "SJIS","UTF-8"); exit;

    • ベストアンサー
    • PHP
  • PHPで配列の検索方法

    PHPで下のような2次元配列があったとします。(りんご=a、みかん=bのような意味です。CSVからデータを2次元配列に格納したものです。) $data[0][0]="りんご" , $data[0][1]="a" $data[1][0]="みかん" , $data[1][1]="b" $data[2][0]="ばなな" , $data[2][1]="c" $data[3][0]="ぶどう" , $data[3][1]="d" ここで下のような1次元配列$hogeがあったとき $hoge[0]="ばなな" , $hoge[1]="りんご" 新たに1次元配列$hogehogeを用意して、2次元配列の中から"りんご"や"ばなな"に対応する文字列を探し出して $hogehoge[0]="c" , $hogehoge[1]="a" と、格納したいのですが、やり方がわかりません。 イメージとしまして、 $hoge[0]→($data[0][0]~$data[3][0]の中から探す)→($data[2][0]であるとわかる)→($data[2][0]に対応するのは$data[2][1]だとわかる)→($hogehoge[0]=cと格納) もし分かる方がおられましたらお願いします。

    • ベストアンサー
    • PHP
  • CSVファイルへの文字列データの書き出しについて

    OS:WindowsXP、Excel:2003 です。 Excelマクロ(VBA)で、あるデータをCSVファイルに出力しているのですが、 文字列型(String)を書き出すと、必ずダブルクォーテーションで囲まれます。 CSVへ書き出すときは、そういう仕様になっているということは分かったのですが、 処理の都合上、どうしてもダブルクォーテーションで囲まずに書き出ししたいと思っています。 そういう場合にはどのようにすれば良いのか教えて下さい。 ちなみに、書き出しは「Write」を使っています。

  • Windows bat でCSVデータを処理したい

    <CSVデータの内容> 0004 10,11,19,12,15,1192,0,00 10,11,20,17,30,1192,1,00 10,11,21,01,00,1193,0,00 10,11,22,20,00,1193,1,00 (1)CSVデータの行ごとに、7番目と8番目の値が0,00の場合、10,11,19を取得して値をDBにインサートしたい。 (2)CSVデータの行ごとに、7番目と8番目の値が1,00の場合、10,11,20を取得して値をDBにインサートしたい。 このような処理をするには、どうしたら、良いでしょうか?