• ベストアンサー

アルファベット、数字を読み込んで変換出力

アルファベット、数字を読み込んで、対応した文字、数字に変換し 出力したいのですが‥ 例えば [a-z ]= [1-26]と対応させ a,b,5,7 を読み込んで 1,2,e,g と出力させる感じです。 tr///などでコンパクトにまとめられるでしょうか? お教え願います。

  • Perl
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

こんなんではどうでしょうか? use strict; use warnings; while (my $line = <DATA>) { chomp $line; my @old = split q{,}, $line; my @new = map { m/\d+/ ? chr($_ + 0x60) : ord($_)-ord('a')+1} @old; print join(':', @new), "\n"; } __END__ a,b,5,7 実行結果 1:2:e:g

huhumu
質問者

お礼

有難うございます。 参考にさせていただきます。 初心者なのでまた質問があると思いますが よろしくお願い致します。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

無理に one-liner にすると perl -pe 'BEGIN { @cvt{"a" .. "z", 1 .. 26} = (1 .. 26, "a" .. "z"); } s/[[:alnum:]]+/$cvt{$&}/eg;' とかできそうだけど... う~ん, 意味不明.

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

a → 1 b → 2 c → 3 … x → 24 y → 25 z → 26 1 → a 2 → b 3 → c 24 → x 25 → y 26 → z の双方向の変換ですか? 数字が二桁になっちゃってるんで trでは無理でしょうね。 コンパクトに纏めるというのはどういったものを想定していますか? たぶん tr ほげほげ のように一行かそこいらで書けるようなもの だと思いますが。

huhumu
質問者

補足

説明不足ですみません。 はい、双方向の変換です。 英字は数字に、数字は英字にといった具合です。 二、三行ではやはり無理でしょうか? 初心者で知識がないもので‥ お教え願います。

関連するQ&A

  • 数字とアルファベット

    A→4、to→2のような数字とアルファベットの対応のようなものを 解説しているサイトはないでしょうか?

  • 文字の変換 (アルファベット)

    文字の変換について教えてください 10進数の1は16進数で1、10はAになります。 ではアルファベットはどうなるんでしょうか? 以下の変換であっているでしょうか? a = c1 b = c2 c = c3 d = c4 e = c5 f = c6 g = c7 h = c8 i = c9 j = d1 k = d2 l = d3 m = d4 n = d5 o = d6 p = d7 q = d8 r = d9 s = e1 t = e2 u = e3 v = e4 w = e5 x = e6 y = e7 z = e8 上記の変換が16進数かどうかもわかりませんが、教えてください。 よろしくお願いします。

  • ローマ数字の変換をしたいのですが

    言語:perl5.00404 機種依存文字である、ローマ数字を変換したいのですが、 例:ローマ数字の1~10を、I,II,III,IV,V,・・・と変換したい。  試みた方法としては、 &jcode::tr(\$str, "\xAD\xB5", "I"); &jcode::tr(\$str, "\xAD\xB6", "II"); &jcode::tr(\$str, "\xAD\xB7", "III"); &jcode::tr(\$str, "\xAD\xB8", "IV"); &jcode::tr(\$str, "\xAD\xB9", "V"); jcodeを使用して変換。 この方法だと、ローマ数字の1~3は、全て"I"としか 変換してくれず困っています。 (1文字目しか変換されないようなのです。) これではいけないと考え、正規表現で以下のように試みたのですが、 $eucpre = qr{(?<!\x8F)}; $eucpost = qr{ (?= (?:[\xA1-\xFE][\xA1-\xFE])* # JIS X 0208 が 0文字以上続いて (?:[\x00-\x7F\x8E\x8F]|\z) # ASCII, SS2, SS3 または終端 ) }x; $str =~ s/$eucpre(?:\xAD\xB5)$eucpost/$1I/g; $str =~ s/$eucpre\Q\xAD\xB5\E$eucpost/$1I/g; $str =~ s/$eucpre(?:\xAD\xB6)$eucpost/$1II/g; $str =~ s/$eucpre\Q\xAD\xB6\E$eucpost/$1II/g; $str =~ s/$eucpre(?:\xAD\xB7)$eucpost/$1III/g; $str =~ s/$eucpre\Q\xAD\xB7\E$eucpost/$1III/g; $str =~ s/$eucpre(?:\xAD\xB8)$eucpost/$1IV/g; $str =~ s/$eucpre\Q\xAD\xB8\E$eucpost/$1IV/g; $str =~ s/$eucpre(?:\xAD\xB9)$eucpost/$1V/g; $str =~ s/$eucpre\Q\xAD\xB9\E$eucpost/$1V/g; これだとperlのバージョンが対応していない(perl5.005以上だとできる)のでこの策もだめで、困り果てています。どなたかよい方法を教えてください。

    • 締切済み
    • CGI
  • 全角数字、アルファベット大小を認識させたいのですが上手くいきません

    入力文字列が、全角数字なのか、全角アルファベットなのか、或いはそれ以外なのかを判断させたいのですが、 以下の「testfunc」では、全角数字、全角アルファベットの大文字のみ判断可能で、全角アルファベットの小文字が、全角英数以外と認識されてしまいます。 どうすれば、全角アルファベットの小文字も認識できるようになるでしょうか? どなたかよいアドバイスをください。 #include <stdio.h> int testfunc (char *c) { unsigned a, b; a = c[0];//上位バイト b = c[1];//下位バイト if ((a >= 0x82) && ((b >= 0x4f) && (b <= 0x58))){//全角0~9 return 2; } else if ((a >= 0x82) && ((b >= 0x60) && (b <= 0x9a))){//全角A~z return 1; } else { return 0; } }

  • エクセルでアルファベット5段階を数字の5段階に変換したいのですが

    エクセル初心者です。マークシートを使って授業アンケートをしました。結果はなんとかエクセルにA,B,C,D,Eで取り込めました。これをそれぞれ数字の1,2,3,4,5に直したいのです。エクセル上での変換の仕方を教えて下さい。色々試しましたがうまくいきません。

  • Excel で 文字→数字変換

    エクセルで文字→数字変換を行いたいのですが、 どのようにすればよいでしょうか? (やりたい例) あるセルの特定文字列位置の文字を数字に変換したい。 文字列先頭から4番目の文字を元に数値に変換する。 Aだと1と変換、Bだと2と変換、Cだと3と変換… A1:xxxBxxxx B1:2 うまく質問が表現できなくてすいません。 実現方法はVBAでも結構です(使ったことはありませんが)。

  • 文字列を数字のみにエンコードして圧縮したい

    アルファベットの文字列を数字のみに変換してできる限り容量を圧縮したいです。 たとえばASCIIコードに変換して・・・でも数字のみに変換はできますが容量を極力減らしたいです。 何か既存のアルゴリズムで良い方法ないでしょうか? 対象はアルファベット小文字のみの26文字で す。 例えば (log 10^10)/log26=7.06なので 10文字分の数字で 7文字相当のアルファベットを埋め込めるのかな?と思います。 単純にa=0 b=1・・・と割り当てて行って 文字列を26進数表記にした物を10進数に変換すれば一応できそうですが よりよい方法とか効率的な方法があれば教えてください。

  • カナ入力でのアルファベットの変換について

    IMEでカナ入力してアルファベットに変換する時、「A」なら「えい」と入力して変換すると全角の大文字・小文字、半角の大文字・小文字の「A」「a」に変換できますが、「I」は同様に「あい」と入力して変換すると大文字の「I」(全角・半角)にしか変換できません 小文字の「i」を表示するには直接入力か、カナモードのままで「i」入力→F9かF10キーで変換しかないようです 他のアルファベットは全部大文字・小文字変換できるのに「i」のみ大文字にしか変換できない理由を教えてください 単純に不思議に思ったので・・・ お願いします

  • 文字列から数字への変換

    文字列から数字への変換にはatoiなどを使うと思うのですが これだと文字として0を変換すると アルファベットなどを変換した場合と 同じになってしまいますよね? 0も入力を受け付けてなおかつ文字列は受け付けないように するにはどのようにすればよいのでしょうか? アドバイス・回答よろしくお願いします

  • ExcelVBA:アルファベットの文字を簡単に出力する方法

    ExcelVBAで、数字のように簡単にアルファベットを順番通りに出力する方法はないでしょうか? 今は下のように、一度変数にアルファベットを代入してから出力するようにしているのですが、もっと簡単な方法はないでしょうか? 用途は例えば、「Range("A1")」のようにセルを指定したい場合などに使用します。 For a= 0 To 25 Select Case a Case 0:英字(a)="A" Case 1:英字(a)="B" Case 2:英字(a)="C" ~~~ Next a 回答よろしくお願いします。

専門家に質問してみよう