• 締切済み

特定の文字を削除したい

<元データ> 1955/03/08,東京太郎BD,東京 営業 1978/12/28,山田花子S,横浜 管理 1970/07/07,佐藤次郎KK,東京 管理 といったCSVデータから特定の文字(名前後のローマ字/1or2桁)をPerlを使用して削除する方法を教えて下さい。 <実行後> 1955/03/08,東京太郎,東京 営業 1978/12/28,山田花子,横浜 管理 1970/07/07,佐藤次郎,東京 管理 宜しくお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

日本語文字列と混在する場合は、encoding指定をして下さい。 $data[1] =~ s/[a-zA-Z]+\Z//; が末尾の英文字を削除している部分です。 また、区切りが全角のカンマになっているようですが、大丈夫ですか? $DELIMITER =","; を適宜変更して下さい #------------------------------------------------------ use encoding 'shiftjis'; $DELIMITER =","; while(<DATA>){ @data=split /$DELIMITER/; $data[1] =~ s/[a-zA-Z]+\Z//; print join $DELIMITER, @data; } __END__ 1955/03/08,東京太郎BD,東京 営業 1978/12/28,山田花子S,横浜 管理 1970/07/07,佐藤次郎KK,東京 管理

KohakuNyanko
質問者

お礼

ご回答ありがとうございます。 色々いじっている内に欲しい結果が得られてしまったのですが、違うやり方もあると分り大変に勉強になりました。 削除したい英字が特定のモノと判明したので、以下のスクリプトで変更できました。合わせてご連絡いたします。 本当に有難うございました。 #---------------------------------------------- if($count != 0){ @part1 = split(/\,/,$record); $csv1 = $part1[0]; #日付 $csv2 = $part1[1]; #氏名 $csv3 = $part1[2]; #区分 #取引先名から口座記号を削除する $csv1 =~s/Uk$|U$|Mk$|M$|Tk$|T$//;  Print '"'.$csv1.'","'.$csv2.'","'.$csv3.'"\n";

関連するQ&A