
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"]
ありがとうございます。
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列の置換をCStringで(C++)
-
mcryptで英数字(12未満)のみに...
-
正規表現
-
PHPでjavascriptを書き出すとき...
-
c# string型の変数に、ダブルク...
-
入力文字に\\マークが入ってい...
-
VB.NET 文字コード
-
PHPで文字列の照合
-
ダブルコーテーション(
-
独自タグに囲まれた文字列の変換
-
マクロ関数 #define の効果は何...
-
PHP VS Java (パフォーマン...
-
VBSで"をエスケープする文字は?
-
不規則なaタグのスクレイピング...
-
○分から○時間○分に変換
-
誤字脱字はご了承ください^^
-
sedでの最短一致の書き方
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
Excel関数「COUNTIF」で”文字”...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルコーテーション(
-
文字列の置換をCStringで(C++)
-
VBSで"をエスケープする文字は?
-
○分から○時間○分に変換
-
php 正規表現で、\\マークを取...
-
ダブルクォーテーションが置換...
-
入力文字に\\マークが入ってい...
-
mcryptで英数字(12未満)のみに...
-
$text = "
-
正規表現で<BR>の行を除外した...
-
文字列のアスタリスク置換
-
マクロ関数 #define の効果は何...
-
c# string型の変数に、ダブルク...
-
文字列の括弧について(初心者)
-
dirnameでパスが正しく取れない...
-
PHPで任意の数の行抽出
-
不規則なaタグのスクレイピング...
-
誤字脱字はご了承ください^^
-
キーワードをハイライトさせた...
-
近似した文字列を置換するエク...
おすすめ情報
「文字列の先頭から、\"となっていない"までの最短一致部分を削除する」スクリプトを求めています。
例を示せば「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