
No.2ベストアンサー
- 回答日時:
私はそのような場合、以下のようにして処理しています。
s/\\"/_ESC_g6d3n8h7v5x7n8_/ ; s/^[^(^")]*"// ; s/_ESC_g6d3n8h7v5x7n8_"/\\"/
「\"」を一旦「_ESC_g6d3n8h7v5x7n8_」に置換し、メインの置換処理を行ってから戻しているだけです。
範囲は、「行頭」から「\"となっていない"」までです。
入力のテキストに「_ESC_g6d3n8h7v5x7n8_」が含まれる場合はうまく行きませんので、100点の方法ではないです。
もっと正攻法でスマートな方法がある気がするので、そこは私も知りたい所です。
No.6
- 回答日時:
「sed」といってもものによって正規表現は違うのだが, 例えば
^(\\"|[^"])*"
くらいかな? もっとエスケープしないといけないかもしれんがそこはてきとうに.
No.5
- 回答日時:
No.2です。
「_ESC_g6d3n8h7v5x7n8_」に意味は全く無いです。
入力テキストの内容の一部と重複しづらい文字列にしているだけです。
使う文字に関しましては、記述が楽な意味を持たない無難な文字を使っているだけです。
サーバーなんかの処理ですと、ユーザーから様々なデータが送られてくると思いますので、こういう文字列では駄目だと思うのですが、ローカルで事務的な作業を行う程度なら、現実的に考えてこの文字列が重複する事はなかなかありえないと思い、このような文字列を使った次第です。
No.4
- 回答日時:
ちょっと確認してみました。
Rubyの場合
・CSVモジュールが利用できる
・1行が配列に変換される。
配列の長さは「その行の項目数」と同じになる。行毎に違えば、それぞれ別になる
・\" というのは、CSV標準の方法ではないためか、対応していない
以上より、
・1行読みこむ
・\" → "" へ変換する
・CSV.parseで分割する
・列数を数える
というプログマムで目的は達成できそうです。
ーーー
https://docs.ruby-lang.org/ja/latest/class/CSV.h …
のサンプルを元に
require 'csv'
# ファイルから一行ずつ
CSV.foreach("file.csv") do |row|
p row
end
で確認したところ「Unclosed quoted field」とエラーに。
http://www.kasai.fm/wiki/rfc4180jp
> 2. CSVの書式の定義
> 7. フィールドがダブルクォーテーションで囲まれている場合、
> フィールドの値に含まれるダブルクォーテーションは、
> その直前にひとつダブルクォーテーションを付加して、
> エスケープしなければならない。
\" → "" に書き換えて再度実行
["ab", "12", "c\"d", "34", "5", "e", "67"]
["fg", "8", "h", "i", "j"]
["kl", "9"]
この回答へのお礼
お礼日時:2018/07/15 10:54
ありがとうございます。
require 'csv'
でやってみました。
列数がそろっていなくても行ごとの配列にしてくれていました。
No.1
- 回答日時:
すみませんが, なにをしたいのかがわかりません. 「\"となっていない " までを最短一致させる」とあるのですが, 「どこから」\"となっていない " までを最短一致させる, というのでしょうか?
下の例, 「ab\"cd"e"fg"hi というデータからe"fg"hi が得られる」も上に書いてあるものとは食い違いがあるようにしか見えません.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- UNIX・Linux sedでの正規化 2 2022/05/10 11:39
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- カスタマイズ(車) 80スープラ(前期型)のライトコントロールスイッチについての質問です。 2 2023/04/04 17:00
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルコーテーション(
-
VBSで"をエスケープする文字は?
-
○分から○時間○分に変換
-
sedでの最短一致の書き方
-
PHPのpreg_replaceについて
-
PHPでjavascriptを書き出すとき...
-
文字列の括弧について(初心者)
-
PHPで任意の数の行抽出
-
ダブル、シングルクォーテーシ...
-
ダブルクォーテーションが置換...
-
PHP
-
VBAのコマンドボタンの文字列の...
-
全角括弧と全角読点の間隔を狭...
-
エクセルのCOUNTIFが正しくカウ...
-
ソースコードの1行が長いとき...
-
メッセージボックスで1025文字...
-
【VBA】エクセルで最後の不要な...
-
グレープシティのSPREAD...
-
C#の改行について
-
記号は半角と全角どちらがよい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字列の置換をCStringで(C++)
-
ダブルコーテーション(
-
PHPの¥
-
VBSで"をエスケープする文字は?
-
○分から○時間○分に変換
-
c# string型の変数に、ダブルク...
-
php 正規表現で、\\マークを取...
-
nl2brが効かないのですが・・・
-
文字列の括弧について(初心者)
-
入力文字に\\マークが入ってい...
-
sedでの最短一致の書き方
-
PHPでCSVを出力する際のセルに...
-
【PHP】preg_replace() で正...
-
文字列のアスタリスク置換
-
空白文字のカンマへの変換について
-
マクロ関数 #define の効果は何...
-
2バイトローマ数字小文字につ...
-
(から)までの文字列を削除したい
-
正規表現で<BR>の行を除外した...
-
PHPのpreg_replaceについて
おすすめ情報
「文字列の先頭から、\"となっていない"までの最短一致部分を削除する」スクリプトを求めています。
例を示せば「ab\"cd"e"fg"hi という文字列に作用してe"fg"hi が得られるスクリプト」です。
一時的に置き換える _ESC_g6d3n8h7v5x7n8_ は何か意味があるものなのでしょうか?
長い文字の羅列ならなんでもよいのでしょうか?
なんでもよいにしても、普通の文字や制御文字などにならないように注意すればよいのでしょうか?
列数の異なるCSVデータが連結されているテキストデータの各行の列数を調べようとしています。
データ区切りではなくデータ内容としての二重引用符にはその直前に\が付いています。
Rubyは多少知っていますが、くずれたCSVを調べるモジュールがありますでしょうか?
例えばこんな感じです。
"ab",12,"c\"d",34,5,"e",67
fg,8,h,i,j
"kl",9