2017-06-06 10 views
-3

テーブルをRに読み込むコードを更新しています。テーブルの区切り文字はセミコロンでなければなりません。表の中のいくつかの要素にはセミコロンがあり、コロンで置き換える必要があります。同時に、コードはタブをセミコロンに置き換えており、これは保持する必要があります。複数の文字をPerlの複数の置換えに置き換えます

現在のスクリプトが行

sprintf("%s -e '%s' | perl -pe 's/\t/;/g' > %s", hive.cmd, sql, tmp_file) 

を持っており、順番に、に更新する必要があります。

  1. ;

編集で\tを交換し:

  • ;を交換してください:私はPerlで経験がないと付け加えるべきです。

  • +1

    あなたはどんな問題を抱えていますか?何を試しましたか? –

    +0

    私はPerlでの経験がなく、少し時間が掛かっています。ソリューションは簡単だと思っていますが、現時点では自分自身に基本を教える時間がありません。 – AVS

    +2

    インターネットに質問を投稿することは、「少し時間がかかる」場合は、助けを得るための最良の方法ではありません。技能と引き換えに専門家のお金を提供することをおすすめできますか? –

    答えて

    -1

    文字列を置換するための簡単な別の方法:

    は、我々は、単一の正規表現でそれらの両方を検索し、対応する値の一致に置き換えることができます2試合\;\tを見つける必要があります。 1のsemicolonと残りの部分と

    $str=~s/((\;)|\t)/$2 ? '\:' : '\;'/eg; 
         ^^
    

    $2マッチは\t区切ると一致します。

    +2

    私はdownvotedしていませんが、これは 'tr/\ t; /;:/' :-)を書くのは本当に複雑な方法のようです。 –

    +0

    @DaveCrossはい、これは検索や置換文字列は複数の文字です。代わりの答えとして持っている価値があります。 – ysth

    +0

    @ysth:同意しました。それはなぜ(私が言ったように)私は下降していないのですか。 –

    4

    Perlには、このような作業を行うための「音素変換」演算子(tr/.../.../)があります。

    $string =~ tr/\t;/;:/; 
    

    これに対して代用演算子を使用することは過剰です。

    関連する問題