rubyによる文字列の置換でちょっと困っています。
例えば
text = "ABCDABCEFG"
という文字列があったとします。
その中の"ABC"の部分を"あいう"と置き換える場合
text = text.gsub(/ABC/, "あいう")
で
text = "あいうDあいうEFG"
と置換できるはずです。
以上のような操作は問題ないのですが
置換対象と置換後の文字列を以下のように定義して
subに放り込むということは出来ないのでしょうか。
置換前文字列:mae = "ABC"
置換後文字列:ato = "あいう"
text = text.gsub(/mae/, ato)
でもこれだと置換対象が"mae"という
文字列になってしまいますよね・・・
そもそもこのような機能はrubyにはないのでしょうか。
でも無いとかなり不便だと思いますが・・・
現在何十万行のcsvファイルを数千行の置換文字列対応表
をつかっていっぺんに処理しようとしまして
以上のような方法をとろうとして詰まっています。
どなたか詳しい方ご教授よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
以下のような感じで。
#{}によるvariable interpolation を使ってもいいですけど
こっちの方が良いと思います。
#!ruby -Ks
text = "ABCDABCEFG"
mae = "ABC"
#mae = Regexp.compile("ABC")
ato = "あいう"
r = text.gsub(mae){ ato }
puts "置換前 = #{text}"
puts "置換後 = #{r}"
実行結果:
置換前 = ABCDABCEFG
置換後 = あいうDあいうEFG
この回答への補足
迅速な回答ありがとうございます。
さっそく以上の方法を使ってみたのですが
やはりうまく置換できません・・・
ちょっと説明不足だったので作業内容をもうちょっと詳しく書きます。
以下のような置換文字列一覧のcsvファイルがあります。
A,あ
I,い
U,う
これを読み込んで英語と読みの文字列が入った配列を作ります。
英語の配列 eng (eng[0]="A" eng[1]="B" eng[2]="C")
読みの配列 yomi (yomi[0]="あ" yomi[1]="い" yomi[2]="う")
この対応をgsubを使って英語の文字列を日本語に直す、
という操作をやろうとしています。
mae=eng[0]
ato=yomi[0]
として先ほど教えていただいたとおりにあるtextを
text=text(mae){ato}
としてみたのですがうまくいきません。
なお文字コードはすべてeucに統一しています。
どこがまずいのでしょうか・・・ご教授お願いします。
No.2
- 回答日時:
単に「うまくいかない」ではなく、できるだけ小さな、
どこでも現象を再現できるスクリプトとデータを提示してください。
でないと余計なやり取りが増えることになります。
#ruby -Ks
eng = Array.new()
yomi = Array.new()
DATA.each do |line|
puts line #デバッグ用
fields = line.chomp.split(',')
eng << fields[0]
yomi << fields[1]
end
p eng #この2行はデバッグ用
p yomi
text = "ABCDABCEFG"
puts "置換前:#{text}"
text = text.gsub(eng[0]){yomi[0]}
puts "置換後:#{text}"
__END__
A,あ
I,い
U,う
A,あ
I,い
U,う
["A", "I", "U"]
["\202\240", "\202\242", "\202\244"]
置換前:ABCDABCEFG
置換後:あBCDあBCEFG
euc-jpでもやりましたが、問題なしです。
> ご教授お願いします。
「教示」です。
rubyを触り始めてまだ1週間もたってないもので
漠然とした質問になってしまって申しわけありませんでした。
以上の方法で今度はうまくいきました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- その他(コンピューター・テクノロジー) 正規表現の置換で一部の文字列をそのまま残したい 2 2022/05/03 19:19
- Ruby power BI クエリエディター 〇〇を含む文字列置換 1 2022/10/16 17:34
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) 数式の置換がうまく行かない 6 2022/05/04 15:51
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 置換文字がみつからない時
-
住所編集のマクロを組んでいて...
-
GoogleAppsScript文字列置換の...
-
正規表現でURLを抽出したいと思...
-
【Excel VBA】文字列の置換作業...
-
C#で空白行を削除する方法
-
テキストファイル中の文字列の置換
-
置換した文字色の変更
-
C言語でテキストファイルの内容...
-
csvデータ ダブルクォーテ...
-
word オートシェイプ内も一括変換
-
特定の列のみ置換を行いたい
-
procmailで本文の文字列置換
-
秀丸で数字だけの行を削除したい
-
EXCEL警告「置換対象のデータが...
-
各項目がダブルクォーテーショ...
-
ハングルを日本語に置換
-
\\(円)記号を置換したい
-
サクラエディタ 数字だけを置...
-
正規表現で一括置換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
各項目がダブルクォーテーショ...
-
VBA 置換文字がみつからない時
-
正規表現で、特定の文字列を含...
-
スペースで区切られた氏名から...
-
csvデータのダブルクォーテーシ...
-
csvデータ ダブルクォーテ...
-
GoogleAppsScript文字列置換の...
-
C言語でテキストファイルの内容...
-
正規表現 特定の文字列を含む行...
-
テキストボックスの文字列を置...
-
EXCEL警告「置換対象のデータが...
-
TeraPadエディターの操作方法に...
-
xmlファイル内の文字列置換
-
python 大文字小文字を区別しな...
-
C#で空白行を削除する方法
-
テキストファイル中の文字列の置換
-
Excel VBA 教えてください。 VB...
-
ハングルを日本語に置換
-
EXCEL VBA でCTRL+Fのダイア...
-
PowerShellでテキストの空白行...
おすすめ情報