• ベストアンサー

ファイルから読込んだ文字列から\を消したい

perlの質問です。 フォームからデータをタブ区切りテキストファイルに保存する際、例えば「表示」ならエスケープシーケンスして「表\示」という保存がされます。 これについては問題ないと思うのですが、そのファイルから読込んで、テキストボックスに表示した際にも「表\示」と\付きで表示されてしまいます。 これを消すにはどのようにすればよいのでしょうか。 ちなみに読込んだ後で$data=~ s/\\//g;としたら、\は消えましたが今度は文字化けをおこします。あっちが解消されればこっちに問題発生という感じです。

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

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

すいません。仕様を勘違いしていました。 独立した \ は消しちゃまずいですよね。 s/([\x81-\x9f\xe0-\xef]\\)\\/$1/g; で、「表」(他にもありますが)に続いた\を消します。

souta_n
質問者

お礼

かさねがさね有難うございます。

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

その他の回答 (2)

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

バージョンはコマンドプロンプトで perl -v とすれば確認できますよ。 で、5.005_03だとして話を進めます。多分jperlではないですよね。 これも perl -v で確認できるんですが。 プラットフォームはOSなどの環境を知りたかったのですが、ATHTTPDを お使いということなので自動的にWindowsであることはわかりました。 で、対処方法ですが、ファイルから読み込んだ時点で余計な \ がついていて 表示する前にそれを取り除くということで、   $data =~ s/([\x81-\x9f\xe0-\xef]\\)|\\/$1/g; でどうでしょうか? ファイルを保存するときにこの置換をやったほうがよいと思わないでもないんですが。

souta_n
質問者

お礼

なるほど、ファイル保存の際に置きかえした方が、後処理でも余分なコードが必要ないのでそうします。 すいませんでした。質問にまともに答えられなくて・・・ちょっと別件で勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

まあ見当はつきますが… 使っているPerlのバージョンと種類、プラットフォーム、使用している 文字コード(ShiftJISでしょうけど)を明確にしていただけますか? 『テキストボックスに表示』とあるのでWindowsのそれか、cgiで ブラウザーに表示させているとかと思いますがその辺もお願いします。

souta_n
質問者

補足

Perlのバージョンですか?えぇっと・・・exeファイルの名前がPerl5.00503.exeとなってますからこの数字がバージョンでしょうか? プラットフォーム???Webサーバーのことですか? AN HTTP Daemon Ver1.41gです。 文字コードはShiftJISです。 なんか頼りなくてすいません。

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

関連するQ&A

  • 区切り文字をTABにしたい

    CGI-Perl初心者です。 エントリデータを、カンマ区切りテキストデータで保存するようにしていますが、(入門書のファイル操作を参照しながら何とか作れた代物です)後で大きな問題が発生しました。このデータには金額を入れる項目があって、例えば10,000円とカンマを入れると当たり前ですが、区切り文字と判断して10と000円を分けてしまうのです。そこでTAB区切りテキストデータに変更したいのですが、 $data=join(",",変数,変数,変数,変数); としている","の部分をタブにするにはどうしたら良いのでしょうか?

    • ベストアンサー
    • Perl
  • Open Office.org Calcでタブ区切りテキストを開きたいんですが・・・

    いつもお世話になります。 今回も宜しくお願いしますm(._.)m Open Office.org Calcでタブ区切テキストを開きたいんですが、表になって表示されず、文字だけズラーっと表示されてしまいます。 タブ区切りテキストを開く際には何か設定など必要なのでしょうか? それともタブ区切りテキストは開けないのでしょうか? 開き方としては・・・ Open Office.org Calcを開く     ↓ ファイルの開くより保存しておいたタブ区切りテキストを開く といった様にやりました。 ただ単にこれをやっただけでは開けないのでしょうか? 詳しい方いらっしゃいましたらお教え下さい。 宜しくお願い致します。

  • テキストファイルのデータ区切り文字(制御文字)について

    テキストファイルにデータを保存しているのですが、区切り文字タブ\tはフィールドの区切りに使っています。 その状態で、仮に1つのフィールドにデータを詰め込む場合、,(カンマ)で区切った場合にデータ自体に金額の,があった場合、誤動作します。フィールドの区切りはタブ\tは普通ですが、1つのフィールドに複数データを持たせる場合の区切り文字は\0など使っても問題ないのでしょうか? 環境はWindows, Linux両方で使います。\0を使ってそれが文字列の最後とまた誤動作しても嫌です。 皆さんは\t以外にテキストデータの区切りにどのような制御文字を使っていますか?ちなみに改行は1レコードの区切り文字です。

    • ベストアンサー
    • Perl
  • Shift_JISをeuc-jpに変換

    エクセルのデータをテキストに保存し直したデータがあります。 中身はタブ区切りの日本語の単語が数千レコード。 この時、このテキストファイルの文字コードは当然「シフトJIS」ですが、これをperlで受け取ってフォームから文字検索を行いテーブルに検索結果を表示させるプログラムを作りました。 シフトJISなので案の定、文字化けを起こしました。 なのでデータを一度「euc-jp」に変換すると「表」や「ー」などは文字化けを起こすことなく表示するようになりました。 ところが、「(1)、(2)、(3)・・・」の丸数字だけが何故か文字化けしたままで直りません。 なんとかなりませんでしょうか? #データの読み込み open F_DATA, '<', "$cgiparam" or die;  my @lines = <F_DATA>; close F_DATA; #文字コードの変換 foreach (@lines){  Encode::from_to($_,"Shift_JIS", "euc-jp"); } よろしくお願いします。

    • ベストアンサー
    • Perl
  • VBA(テキストファイルのデータ コピー)

    質問No.773038にて 回答No.5で 実際にやってみると 確かに動作は抜群に質問通りですが 文字化けして エクセルに貼られています。 肝心の テキストデータの保存方法が悪いのか  検討が付きません。 私個人は アプリから csv 変換用があり やっているのです。しかし エクセルにて手作業にて テキストファイルウィザードで カンマやタブの区切り・・・ 元のファイルは 932 日本語(シフト JIS) フィールドの区切りは セミコロンとしてやり セルにしてやると 確かに問題なく 文字化けしません 何故 VBAでやると 文字化けするのか 原因がわかりません。 どなたか 文字化けに出会った人はいませんか? 対応策があれば ご教授願います。

  • OSXのターミナルでテキストファイルを開く

    OSX上でエクセルにあるデータをテキストフォーマット(タブ区切り)で保存して、それをターミナル上で開こうとすると改行が省略されてターミナル上でそのテキストファイルを開くことができません。どのように保存したらエクセルファイルをターミナル上で見えるでしょうか? どうぞよろしくお願いします。

  • PHPで「®」や特殊文字のエスケープ

    PHPでフォームから送られてきたデータを、MySQLに登録する際に、 「®」や特殊文字をエスケープして登録したいのですが、 どのようにしたらいいのでしょうか。 「<」や「&」などはhtmlspecialcharsでエスケープできているのですが、 「®」や特殊文字(~やm2など)がエスケープできず、 文字化けを起こして困っています。

    • ベストアンサー
    • PHP
  • Delphi 文字列の中のタブをコンマに

    Delphi タブ区切りのテキストファイルを読み込んでMemoにおいています。 読込んだ後、タブ区切りの部分をコンマ(,)区切りに変更したいのですが。 タブってどう表現したらよろしいでしょうか?

  • テキストファイルについて

    あるデータがカンマ区切りなのか、タブ区切りなのか、スペース区切りなのかはテキストファイルにしてメモ帳で開いて確認するしかないんでしょうか? 宜しくお願いします。

  • テキストファイルでタブ文字を何に使うのか?

    一般的なテキストファイルでタブ文字はどのような用途で使用しますか? 私の場合は基本的に、プログラムのソースコードで行頭のインデントにしか使いません。 あと強いて言うならば、TSVファイルの区切り文字として使用したり、構造化テキスト(そういうフリーソフト)のファイル内でのシーケンスとして使う事はありますが、これはテキストファイルではあるのですが、特別なルールのあるやや特殊なファイルといえると思います。なので、少なくとも今回はTSVや構造化テキストは「一般的なテキストファイル」ではないと考えます。 ※ソースコードなどで複数行の桁位置そろえで「行中」に使用しているケースを見たことがありますがよくない例ではないかと思います。 なので私は個人的に、「一般的なテキストファイルではタブ文字は行頭のインデントにしか使わない」と思っています。 これはあっていますか? テキストファイルでそれ以外に使うことってありますか? あるならどのような用途で使用しているのか教えてください。 よろしくお願いします。