質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

357閲覧

【Ruby】文字列をシンボルにする正規表現を教えてください

ssk

総合スコア332

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/01/07 06:51

編集2018/01/07 07:26

#わからないこと
カンマ区切りも文字列をカンマ区切りのシンボルにする方法を教えてください。
たぶん、正規表現で整形すると思うのですが、検索しても方法がわからず、、

【前】
id,lastname,lastname_kana

【正規表現後】
:id, :lastname, :lastname_kana

#補足
Ruby ver2.1
Rails ver5.1

#追記

@csv_export_template.clumn_namesの中身

id,lastname,lastname_kana

User.csv_column_namesの中身

{
id: "ID::id",
lastname: "苗字::lastname",
lastname_kana: "ふりがな(苗字)::lastname_kana"



}

id,lastname,lastname_kanaに該当するkey
User.csv_column_namesから取り除くことが目的です。

#現状
:id, :lastname, :lastname_kanaを動的に変えるため、正規表現を伺いました。

ruby

1 - User.csv_column_names.except!(:id, :lastname, :lastname_kana).each do |k, v| 2 li data-clumn-name="#{k}" 3 = v

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

正規表現を使わなくてもできます。
例えば以下のような感じでいかがでしょうか?

ruby

1[ykt68@macbook15 ~]$ irb 2irb(main):001:0> csv_line = 'id,lastname,lastname_kana' 3=> "id,lastname,lastname_kana" 4irb(main):002:0> csv_line.split(',').map(&:to_sym) 5=> [:id, :lastname, :lastname_kana] 6irb(main):003:0>

参考になれば幸いです。


追記

質問を勘違いしていたようです。
質問で問われているのが、

id,lastname,lastname_kana という文字列を、
:id, :lastname, :lastname_kan という文字列に変換したい。

という趣旨であるならば、私の回答は無視してください。


追記(その2)

コメントにも書きましたが、以下のように、User.csv_column_names.except! に、
シンボルの配列に * をつけて展開して渡すことで解決にならないでしょうか?

- syms = 'id,lastname,lastname_kana'.split(',').map(&:to_sym) - User.csv_column_names.except!(*syms).each do |k, v| li data-clumn-name="#{k}" = v

投稿2018/01/07 07:04

編集2018/01/07 08:06
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2018/01/07 07:28

jun68ykt様 まずは、ご回答ありがとうございます。 説明不足で申し訳ございません。 情報を追記いたしましたので、助言いただけましたら幸いです。 よろしくお願いいたします。
jun68ykt

2018/01/07 08:02 編集

追記を拝読したところ、 やはり、シンボルの配列を得ることで 解決するのではないかと思いました。 つまり、 User.csv_column_names.except!(:id, :lastname, :lastname_kana).each do |k, v| の引数を動的に作るには、 syms = "id,lastname,lastname_kana".split(',').map(&:to_sym) としてやり、syms には、[:id, :lastname, :lastname_kana] が入ってくるので、 これを User.csv_column_names.except!(*syms).each do |k, v| と、*(アスタリスク)つきで、配列を展開して渡してやればよいのでは? と思いましたが、いかがでしょう?
ssk

2018/01/07 08:16

jun68ykt様 ありがとうございます。 *(アスタリスク)つきで展開せずに行っていました。 ご助言、ありがとうございます。
jun68ykt

2018/01/07 08:16

解決されたようでよかったです!
guest

0

つ"id,lastname,lastname-kana".gsub(/([^,\s]+)/,':\1')

投稿2018/01/07 07:05

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2018/01/07 07:20

hichon様 ありがとうございます。 exceptに渡す引数のために、伺いました。 しかし、意図した動作を取れず、、 User.csv_column_names.except!(@csv_export_template.clumn_names.gsub(/([^,\s]+)/,':\1')).each ↑このように利用するために、正規表現かと思いました。
ssk

2018/01/07 07:29

説明不足でお手間を取らせてしまい、申し訳ございません。 情報を追記いたしましたので、再度、回答いただけると助かります。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問