既存のフリーウエアのCGIを改造して、フォームから送信されたメールアドレスを元に、それに対応する社員番号をテキストファイルから読み込んで、入力されたアドレス宛にメールするCGIを作ろうとしてます。
しかし、テキストファイルに確かに存在するメールアドレスをCGIが見つけてくれていないみたいなので、CGIがデータファイルをどう読み込んでいるのか確認するために以下のような別の簡単なCGIを動かしてみました。
(私はPerlの知識はかなり浅いので、この簡単なテスト用CGIはこのサイトで見つけたソースを元に作らせて頂いたものです)
#!/usr/local/bin/perl
print "Content-Type: text/plain\n\n";
my $file = 'data/member.usr'; # 読み込むファイル名
open(my $fd, $file); # ファイルを開く
foreach (<$fd>) { # 以下1行ずつ読み込み
my @cols = split("\t", $_); # タブで分割して配列へ
$aidhi = $cols[2] if $cols[0] eq "031234567"; # 1項目めが該当の電話番号ならなら$aidhiはこの行の3項目めの内容
}
close($fd); # ファイルを閉じる
print $aidhi, "\n";
そして、データファイル「member.usr」の内容は次のようになっています。
0454329876DG2GOUd75C2V2nantoka@jcom.ne.jp1187785757118778575711877857571187785757
031234567oHMTws.ycIreEnamae@home.ne.jp1187785757118778575711877857571187785757
09012340001aQH3oO85YlTdUdenwa@docomo.ne.jp1187785757118778575711877857571187785757
こうして031234567に対応するメールアドレスを表示させようとすると、検索結果は「namae@home.ne.jp」と表示されずに「00」と表示されてしまいます。
でも、ここでCGIで取り出す内容を
$aidhi = $cols[1] if $cols[0] eq "031234567";
と変えると、ちゃんと2項目めの「oHMTws.ycIreE」を表示してきます。
@マークやドットがいけないのでしょうか?
$aidhi の内容に正しくメールアドレスを読み込ませるにはどうしたら良いのでしょう?
だいたい、なぜ読み込んだ結果が「00」とゼロ2つになってしまうのでしょう?
ちなみに、このデータファイルは別の既存CGI(スクリプトゲイトというフリーウエアです)が吐き出すデータベースファイルで、このファイルは既に色々な別のCGIに参照されているのでこのデータファイルのフォーマットを変えるのは極力避けなければなりません。
データファイルがタブ区切りになっているのがいけないのかなと思い、区切り方をカンマにしてCSVで読み込ませてみましたが、結果は変わりませんでした。
解決策のお心当たりのある方はいらっしゃらないでしょうか?
どうかよろしくお願い致します。
No.1ベストアンサー
- 回答日時:
Linux環境ですが、
コピペして、member.usrのスペースをタブに置き換えて(コピペなので、スペースになってしまうので)、
動かしたら、きちんと動きました。。。
疑わしいのは、member.usrですね。
バイナリダンプで見て、余計なコードが入っていませんか?
ご回答ありがとうございました。
バイナリエディタって、テキストファイルの内容をチェックするのにも使えるって知りませんでした。
おっしゃる通り、テキストエディタでは表示されない黒点のコードが2つ入っていました!
これの正体がわからないので、「eq」でなく「$aidhi = ~ m/abc@xxx.ne.jp/」で「このメールアドレスを含む場合」という抽出方法で切り抜けることにしました。
おかげさまで助かりました。
どうもありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- Outlook(アウトルック) w10からw11にバージョンアップ。アウトルックがクラウドと連携…そのためか、連絡先が消失!! 3 2023/05/09 18:34
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Perl perlの構文でカンマの意味が分からない 2 2022/10/30 01:53
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
matlabで、平均値を求める方法...
-
メールアドレスをテキストファ...
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
【Excel VBA】10進数を2進数に...
-
バイナリとBCDコード
-
char str[256]の256の意味は?
-
ビットスワップとバイトスワッ...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
Excel VBA メール作成について ...
-
htmlソース編集で、各タグを何...
-
DataGridViewの特定列に入力さ...
-
:(コロン)のKeyCode
-
Visual Basicでパック10進(2進...
-
日付時刻を4バイトに
-
postで送られてきたパラメータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MATLAB(マトラボ)とcsvファ...
-
matlabで、平均値を求める方法...
-
VBScripの2次元動的配列
-
VBA エクセルで1列で表示したい。
-
いつどこゲームのようなテキス...
-
文字型変数を使って2進数表示す...
-
複数のCSVを一度にダウンロード
-
VB6.0でMSChartをタイマーを使...
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
Excel VBA メール作成について ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
stable diffusionのエラー
-
COBOLのCOMP形式について
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
バイナリとBCDコード
-
バイト列とバイナリ列の違いが...
おすすめ情報