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

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

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

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

受付中

perl 日本語パターンマッチ

bluebird
bluebird

総合スコア0

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

1回答

0グッド

0クリップ

244閲覧

投稿2022/12/02 06:34

前提

日本語ファイルをデータベースに格納する為
strawberry perl でコンバーターを作成しています。

実現したいこと

都道府県ごとにファイルを分割するのが目的です。
読み込んだファイルの住所のフィールドが●●で始まっていたら、出力ファイルへ、が希望する動作です。

発生している問題・エラーメッセージ

マッチするはずの東京都のレコードはスルーされ
出力されないまま終了します。
elseでprintすると全読み込み行が出力されます。

該当のソースコード

#!/usr/bin/perl

use utf8;
#binmode STDIN, ':encoding(cp932)';
#binmode STDOUT, ':encoding(cp932)';
#binmode STDERR, ':encoding(cp932)';
#binmode STDIN, ':utf-8';
#binmode STDOUT, ':utf-8';
#binmode STDERR, ':utf-8';
use Encode qw/encode/;

our $file = 'data.csv';
#our $rslt = 'c:\Strawberry\data_tokyo.csv';

読み込みファイル

open(our $in, "<", $file) or die "Cannot open input: $file: $!";

書き出しファイル

#open(our $out, ">", $rslt) or die "Cannot open output: $rslt: $!";
while(our $str = readline $in){
chomp $str;
$str = encode('utf8', $str);
#$str = decode('utf-8', $str);
our ($pref) = (split(/,/, $str))[8];
if($pref =~ /^東京/){
# Encode::from_to( $str, 'utf-8', 'sjis' );
print "$str\n";
}
}

close $in or die qw/Can't close file "$in": $!/;
#close $out or die qw/Can't close file "$out": $!/;

exit;

試したこと

perlスクリプトはutf8 読み込みファイルはshift-jisです
日本語の判定に失敗しているので苦手な文字コード云々か、とネット上の
サンプルを色々試した残骸がコメントアウト部分です

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

yuma.inaura

2022/12/02 09:52

コード部分はコードブロックで囲うと読みやすくなりますよ

回答1

0

関連性の高い質問について過去に回答しています。
perl jsonで日本語文字化け
ここをみて原則通りにやってみてください。
現状では、入力データのデコード、出力データのエンコード、ともにできていないでしょう。あらゆる処理はデコードされたデータに対してしか試みてはいけません。

最低限のコードを書いておきます。

  • データは読み込むと同時にデコードする。
  • データは書き込む寸前にエンコードする。
  • いま扱おうとしているデータがデコードされているのか居ないのか常に意識する。
  • あらゆる処理はデコードされたデータについてのみ行う。
  • あやふやな認識のまま試行錯誤をしない。
  • 巷にあふれるいい加減な解説は信用しない
use strict; use warnings; use utf8; open(my $fhi, '<encoding(cp932)', "input.sjis.txt") or die; # 読み込みながらdecode open(my $fho, '>:utf8', "output.utf8.out"); # 書き出す時にencode while(<$fhi>){ /東京/ and print {$fho} $_; }

投稿2022/12/02 18:58

編集2022/12/05 08:05
KojiDoi

総合スコア13443

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。