• ベストアンサー

外部取得文字列と内部記入文字列のマッチング

CSVなどからダウンロードした文字列とソース内に書いた文字列をマッチングさせようとしているがうまくいきません。 utf8で書かれたソース内でmy $a =('可')という文字列とcsvから取り込んだ文字列 my &b = ('可')をマッチングさせようとしているのですがうまくいきません。 use utf8を宣言してマッチングさせるには$bもしくは$bをどう変えればよいのでしょうか?

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

  • ベストアンサー
回答No.2

use Encode qw/find_encoding/; my $cp932 = find_encoding('cp932'); $b = $cp932->decode($b);

keeeeeeeen
質問者

お礼

>kinoko2009さん ありがとうございます!!!できました。 cp932でやればよかったんですね!! perl5.8のutf8フラグ関係が不慣れなものですごく助かりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

use Encode qw/find_encoding/; my $utf8 = find_encoding('utf8'); $b = $utf8->decode($b);

keeeeeeeen
質問者

お礼

解答ありがとうございます。 上記でやってみたのですが、$bの文字列がそもそも何かわかっていないせいか、$b = $utf8->decode($b);の$bには????が入ってしまってうまくいきません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列のunicodeへの変換方法

    utf8で記述したperlスクリプトを書いてます。 諸般の事情より use utf8; は宣言できません。 そんな状況で $test = 'テスト'; という文字列を '%u30c6%u40b9%u30c8' に変換したいのですが 方法が見つかりません。 unpackやsprintfを使ってあげるのかと思うのですが 思うような値が得られません。 わかる方、いらっしゃると思います。 教えていただけませんか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • マッチングしたい要素同士が文字列の中で重なっている場合

    perlの正規表現マッチングでうまくいかないことがあり、質問させていただきたいと思います。 たとえば AAAAAAXBBBXCCX という文字列があって「各Xの左側に位置する6文字をすべてあつめる」ということをしたいと思っています。 この文字列では AAAAAA AAXBBB BBBXCC が自分の取り出したい文字になります。 そこで以下のようなコードを書いたのですが my $seq = "AAAAAAXBBBXCCX"; my $length = 6; my @fragmentlist ; @fragmentlist = $seq =~ /(.{$length})X/g ; foreach my $fragment (@fragmentlist ){ print $fragment , "\n"; } 実際に出力されるのは AAAAAA BBBXCC となり、 AAXBBB は認識されないようです。これはおそらくAAAAAAとAAXBBBが元の文字列の中で部分的に重なっているからだと思います。 このようなマッチング対象が文字列の中で重なっている場合は、どのようにすればすべてのパターンを集めることができるでしょうか? active perl 5.8.8 , WinXP sp2環境です。

    • ベストアンサー
    • Perl
  • 文字列検索時違う文字でマッチしてしまいます。

    はじめまして。早速ですが・・・。 CGIで文字列検索し、検索語にマッチした場合その文字を抜き出すという処理をしているのですが、違うところでマッチングしてしまいます。 (プログラム、CSVデータともにEUCです。) たとえば・・「海」を検索語として検索した場合、「~こむ~」という部分でマッチしてしまいます。 おそらく「海:[B3A4]」「こむ:[A4B3][A4E0]」でEUCコードになっている為、B3A4でマッチしているんだと思います。 何か有効な検索処理等はないものでしょうか? よろしくお願い致します。

    • ベストアンサー
    • CGI
  • ソース中の文字列と、DBから取得した文字列を同時に表示すると文字化け

    perl 5.8.6を使用しています。 MySQLから取り出したデータを、ソース中の文字列と同じprint文の中で 表示させようとした場合に文字化けしてしまいます。 文字コードはMySQL, ソースファイルともUnicode(UTF-8)を使用しています。 具体的には $a[0] にデータベースから取り出した文字列が入っているとすると、 ソース中で print "テスト:$a[0]"; とか print <<END_OF_TEXT; テスト:$a[0] END_OF_HTML とすると、$a[0]の部分が文字化けしてしまうのですが、 print "テスト:"; print "$a[0]"; と書くと、文字化けせずに表示されます。 ちょっと日本語を使ったり、データベースから取り出した文字列を使う箇所が多いプログラムなので、ひとつひとつprint文を分けるのは大変なので避けたいです。 何か文字化けしない回避策や、原因について考えられることがありましたら教えていただけると大変助かります。

    • ベストアンサー
    • Perl
  • 文字列の配列について

    教えてください。 1.文字列の配列はどのように宣言すればよいのでしょうか? char [3][3][20] = {{"朝","昼","晩"},{"morning","evening","night"},{"6:00","12:00","18:00"}}; これでできるとおもうのですが、もっと効率的な宣言ってあるのでしょうか? 2.また、この変数を3つのソースファイルで使用できるグローバル変数にしたいのですが、どのように宣言すればよいのでしょうか? リンカエラー(外部シンボルが未解決)が発生してしまい、困っています。 def.h(ここで宣言したい)  -----|----  |   |   | A.h  B.h C.h  |   |   | A.cpp B.cpp C.cpp ちなみにBorland C++ Builder5を使っています。

  • 難問?Perlの文字列置換について

    下記のプログラムをベースにして置換を行いたいです。 use File::Basename; use File::Copy; use File::Find; use File::Path; my @filelist = (); $inputfile='C:\Users\test.txt'; $outputfile='C:\Users\test_new.txt'; open (IN, $inputfile) or die "$!"; open (OUT, ">$outputfile") or die "$!"; while(<IN>) { $str = $_; if ($str =~ / ・・・・・ ・・・・・ } print OUT $str; } close (IN); close(OUT); sub wanted{ push(@filelist, $File::Find::dir."/$_") unless ($_ =~ /^\.$/); } Perlプログラムで下記の2つのソースを一括置換しようとしてます。 (1) paramIdとparamNameの文字列が同一の場合 <html:link styleClass="push" action="/numa.do" paramId="Id" paramName="Id" onclick="URL">ソース</html:link> (2) paramIdとparamNameの文字列が同一でない場合 <html:link styleClass="push" action="/numa.do" paramId="Id" paramName="Name" onclick="URL">ソース</html:link> やりたいことは ・ html:linkをs:aに変換 ・ styleClassをcssClassに変換(これはわかるのですが位置の修正がわかりません。。) ・ action="/numa.do"を/numaに変換 ・ paramIdとparamNameを文字列が同一か同一でないかで分岐処理したい。 目標は以下のように置換したいです。 (1) paramIdとparamNameの文字列が同一の場合 <s:a href="/numa?Id="%{ Id }" cssClass="push" onclick="URL">ソース</s:a> (2) paramIdとparamNameの文字列が同一でない場合 <s:a href="numa" paramId="Id" paramName="Name" cssClass="push" onclick="URL">ソース</s:a> どうしてもこの置換ができません、、誰かぜひ教えてください。 お願い致します。

    • ベストアンサー
    • Perl
  • Amazon サイトからhtmlを取得すると文字化

    すみません。素人です。 Amazon サイトからhtmlを取得すると文字化けしてしまいます。 方法ってないでしょうか? *************** use strict; use warnings; use Web::Scraper; use URI; use Encode qw/encode_utf8/; my $scraper = scraper { process('div', 'title' => 'TEXT'); }; my $url = URI->new('https://www.amazon.co.jp/s/ref=nb_sb_noss?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&url=search-alias%3Daps&field-keywords=test'); my $res = $scraper->scrape($url); print encode_utf8($res->{title}) . "\n"; ******************

    • ベストアンサー
    • Perl
  • 文字列中からある文字列とある文字列の間にある文字列を取得

    表題にあるとおり間の文字列をどうやって取得するべきかと悩んでいます・・ abcdefghijklmn・・・ となっているとき bとe、aとkなど間の間隔が不定なときはどのようにして文字列を取得したらよいのでしょうか? 最初の2文字は与えられているとして考えています。 インターネットのURLで言うなら/から/までの間の文字列と言うことになります。 今私が考えているのは strchrで位置のアドレスを取得してそこからfor文かwhile文で指定の2文字目が出るまでまわすのかなぁ・・と思っています。 ですが具体的にどのような感じに書けばいいのかがわかりません。どなたかご教授ください。

  • 文字列の取得について

    Accessのモジュールを使ってある文字列から指定した文字数の文字列を取得しようとしています。 A:"あああああ" & vbcrlf B:"いいいいい" & vbcrlf C:"うううううう" & vbcrlf D:"えええええ" & vbcrlf A~Dまでフィールドがあり、vbcrlfは改行です。 この文字列に対して以下の処理を実行します。 (1)変数mojiにA & B & C & Dを代入 (2)mojiを全角に変換 (3)Left(moji,20)で左から20文字取得します。 (4)mojiをテキストボックスに登録します。 (5)入力チェック処理  ・フィールドサイズが20文字以内か?  ・全角で登録されているか? →登録後のイメージ ---------------- あああああ いいいいい ううううう ---------------- テキストボックスには全角でしっかり登録されているようにみえるのですが、 どうしても全角で登録してくださいというメッセージが表示されてしまいます。 うううううの次の改行を削除すると、メッセージはでなくなります。 この改行が半角になっているのでしょうか? アドバイスよろしくお願いいたします。

  • VBスクリプト 文字列操作

    VBスクリプト(全くの初心者です)について教えてください。 例えば "test.csv" にて 1,a 1,b 1,c 1,d 2,a 2,b 3,d 3,e 4,a 4,f 4,g のファイルがあるとします。 最初の1列目の数字(文字列)の行数は可変です。 最終的に "test2.csv" 1,a,b,c,d 2,a,b 3,d,e 4,a,f,g というファイルを作りたいのですが,ずばりコードを教えていただけないでしょうか。