dポイントプレゼントキャンペーン実施中!

フォームからの書き込みをメールで受け取る際に、

お名前 ○○ ○子
ご住所 東京都○○…
お電話番号 01-2345-6789
メッセージ ×××××…

となるのを以下のように行が揃うようにしたいです。

お名前    ○○ ○子
ご住所    東京都○○…
お電話番号 01-2345-6789
メッセージ  ×××××…

項目欄であるname="xxx"の文字数字バラバラなので、
その後に続くvalue="yyy"の頭がうまく揃いません。
テーブルは使いたくないのですが、
何か他に方法はありますか?

\tを入れてみたりしたのだけど、ダメでした。

よろしくお願いします。

A 回答 (5件)

valueを配置する位置を決めて、keyの不足部分に半角スペースを補うとか。



$value_point = 20;
foreach $key ( keys( %in ) ) {
while ( length( $key ) <= $value_point ) {
$key = "$key ";
}
}

こんな感じなんでしょうけど、なんだかスマートじゃないですねぇ。
# $value_point はバイト数です。
    • good
    • 0
この回答へのお礼

再びありがとうございます。

この方法、私も考えてやってみたのです。
でも、私の方法ではダメでした…(がっかり)

こういう風にやるんですね。
今この方法でやりかけなので、
明日、アドバイスを参考にもう一度やってみようと思います。

お礼日時:2003/04/25 05:37

#3の続きです。



ハッシュを使ってやる場合、

%in = ("name" => "Momo","address" => "Osaka",
"tel" => "06-****-****","message" => "TEST");

format FILE =
@<<<<<<<<<<@<<<<<<<<<<<
$key $val
.

open (FILE,">test.txt") or die;
while (($key,$val) = each %in){
write FILE;
}
close FILE;

でもいいですし、

項目の順番を気にするなら、
ハッシュを配列に代入してから、

@all = ("name,$in{'name'}","address,$in{'address'}",
"tel,$in{'tel'}","message,$in{'message'}");

format FILE =
@<<<<<<<<<<@<<<<<<<<<<<
$key $val
.

open (FILE,">test.txt") or die;
foreach (@all){
($key,$val) = split (/,/);
write FILE if($val);
}
close FILE;

とやるのもいいと思います。

この回答への補足

ポイントは回答者順にさせてくださいね。

分からないことがあった時はまたよろしくお願いいたします。

補足日時:2003/04/25 23:44
    • good
    • 0
この回答へのお礼

ありがとうございます。

フォーマットとかハッシュとか全く分からず、
回答者さんにお答えいただいた内容も理解できずにいたので、
今日、いろんなサイトを見て回りました。
自分がいじっているスクリプトと回答頂いた分と、
説明が書いてあるサイトを見比べながら、少しずついじっています。

元にあるスクリプトがちょっぴり複雑で、
書いて頂いたスクリプトをどこにどう入れ込めばいいのか
分からなかったのです。

まだいじっている最中で、出来上がってはいないのだけど、
何とかなりそうな予感がします。

こんなに頭を使ったのは久しぶりで、くたくたです(笑)

本当にどうもありがとうございました。

お礼日時:2003/04/25 23:42

すみません、No.3さんにです。


あー、懐かしいというか、そういうのありましたね。
すっかり忘れていました。
う~む、素晴らしい・・・
    • good
    • 0
この回答へのお礼

あ、「う~む、素晴らしい…」ってことは、
#3さんの方法で私の問題が解決するってことですね。
しかも素晴らしいってことだから、良い方法なのですね。

下のお礼で、また恥ずかしいことを書いてしまいました。

明日、続きをやってみて、結果をまた報告いたしますね。
私に出来るかな??

気にかけてくださってありがとうございます。

お礼日時:2003/04/25 05:56

perlならフォーマットを使ったらどうでしょうか。



@all = ("name,Musashi","address,Tokyo",
"tel,03-****-****","message,Hellow!");

format FILE =
@<<<<<<<<<<@<<<<<<<<<<<
$name $value
.

open (FILE,">test.txt") or die;
foreach (@all){
($name,$value) = split (/,/);
write FILE;
}
close FILE;

項目の間隔は <<<<< で調節します。
注)ドット(.)はフォーマットの終りを示します。
    • good
    • 0
この回答へのお礼

<<<<<<
↑こういうのが続くCGIのプログラムって初めて見ました。
フォーマットというのですね。

上のプログラムだと、MusashiとかTokyoとか、
valueの部分がすでに決まっている場合ですよね?

私が取り組んでいるのは、訪問者に書いてもらうフォームで、
名前とか住所とかは、訪問者さんのプロフィールごとに
違ってくるんです。
それでもこの方法でできますか?

まだまだ分からないこと知らないことがたくさんあって、
もっと勉強しなきゃダメですね。

今後の参考にしたいと思います。
ありがとうございました。

お礼日時:2003/04/25 05:51

項目名の後に必要な分だけ半角スペースを入れればそれでいいと思うのですが、どうでしょう?


HTML メールじゃなければテーブルは使えない(というかソースがそのまま表示される。)と思います。

この回答への補足

ありがとうございます。

補足になりますが、
項目がいくつかあって、
name = &key
value = &value
として書き込みのあった所だけをずら~っと
書き出すようになっているのです。
下手な説明だけど分かりますでしょうか?

メールの本文を書くforeachのその部分を
書き換えればどうにかなるのでは…
と思っているのですが、間違ってます?

かなり大幅に書き換えなければならない、というのであれば、
もう私の手には負えないのですが…

テーブルの件は全くその通りですね。 恥ずかしいです。

補足日時:2003/04/24 21:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!