• ベストアンサー

CGIからメールに書き出しする際に行揃えをしたい

フォームからの書き込みをメールで受け取る際に、 お名前 ○○ ○子 ご住所 東京都○○… お電話番号 01-2345-6789 メッセージ ×××××… となるのを以下のように行が揃うようにしたいです。 お名前    ○○ ○子 ご住所    東京都○○… お電話番号 01-2345-6789 メッセージ  ×××××… 項目欄であるname="xxx"の文字数字バラバラなので、 その後に続くvalue="yyy"の頭がうまく揃いません。 テーブルは使いたくないのですが、 何か他に方法はありますか? \tを入れてみたりしたのだけど、ダメでした。 よろしくお願いします。

  • CGI
  • 回答数5
  • ありがとう数9

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

  • ベストアンサー
  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.2

valueを配置する位置を決めて、keyの不足部分に半角スペースを補うとか。 $value_point = 20; foreach $key ( keys( %in ) ) { while ( length( $key ) <= $value_point ) { $key = "$key "; } } こんな感じなんでしょうけど、なんだかスマートじゃないですねぇ。 # $value_point はバイト数です。

cloud9
質問者

お礼

再びありがとうございます。 この方法、私も考えてやってみたのです。 でも、私の方法ではダメでした…(がっかり) こういう風にやるんですね。 今この方法でやりかけなので、 明日、アドバイスを参考にもう一度やってみようと思います。

その他の回答 (4)

  • jubay
  • ベストアンサー率30% (3/10)
回答No.5

#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; とやるのもいいと思います。

cloud9
質問者

お礼

ありがとうございます。 フォーマットとかハッシュとか全く分からず、 回答者さんにお答えいただいた内容も理解できずにいたので、 今日、いろんなサイトを見て回りました。 自分がいじっているスクリプトと回答頂いた分と、 説明が書いてあるサイトを見比べながら、少しずついじっています。 元にあるスクリプトがちょっぴり複雑で、 書いて頂いたスクリプトをどこにどう入れ込めばいいのか 分からなかったのです。 まだいじっている最中で、出来上がってはいないのだけど、 何とかなりそうな予感がします。 こんなに頭を使ったのは久しぶりで、くたくたです(笑) 本当にどうもありがとうございました。

cloud9
質問者

補足

ポイントは回答者順にさせてくださいね。 分からないことがあった時はまたよろしくお願いいたします。

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.4

すみません、No.3さんにです。 あー、懐かしいというか、そういうのありましたね。 すっかり忘れていました。 う~む、素晴らしい・・・

cloud9
質問者

お礼

あ、「う~む、素晴らしい…」ってことは、 #3さんの方法で私の問題が解決するってことですね。 しかも素晴らしいってことだから、良い方法なのですね。 下のお礼で、また恥ずかしいことを書いてしまいました。 明日、続きをやってみて、結果をまた報告いたしますね。 私に出来るかな?? 気にかけてくださってありがとうございます。

  • jubay
  • ベストアンサー率30% (3/10)
回答No.3

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; 項目の間隔は <<<<< で調節します。 注)ドット(.)はフォーマットの終りを示します。

cloud9
質問者

お礼

<<<<<< ↑こういうのが続くCGIのプログラムって初めて見ました。 フォーマットというのですね。 上のプログラムだと、MusashiとかTokyoとか、 valueの部分がすでに決まっている場合ですよね? 私が取り組んでいるのは、訪問者に書いてもらうフォームで、 名前とか住所とかは、訪問者さんのプロフィールごとに 違ってくるんです。 それでもこの方法でできますか? まだまだ分からないこと知らないことがたくさんあって、 もっと勉強しなきゃダメですね。 今後の参考にしたいと思います。 ありがとうございました。

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.1

項目名の後に必要な分だけ半角スペースを入れればそれでいいと思うのですが、どうでしょう? HTML メールじゃなければテーブルは使えない(というかソースがそのまま表示される。)と思います。

cloud9
質問者

補足

ありがとうございます。 補足になりますが、 項目がいくつかあって、 name = &key value = &value として書き込みのあった所だけをずら~っと 書き出すようになっているのです。 下手な説明だけど分かりますでしょうか? メールの本文を書くforeachのその部分を 書き換えればどうにかなるのでは… と思っているのですが、間違ってます? かなり大幅に書き換えなければならない、というのであれば、 もう私の手には負えないのですが… テーブルの件は全くその通りですね。 恥ずかしいです。

関連するQ&A

  • CGIのメールフォームエラーについて

    htmlの送信フォームを作っています。 htmlで作ったデータを次の確認画面のhtmlにもっていって確認させ、最終的には送信とメッセージありがとうというコメントを出したいのです。 <form method="post" action="form.cgi" name="message"> <input type="hidden" name="Thanks" VALUE="thanks.html"> など、そういったところがネックになっているように思うのですが、どこをいじればいいのでしょうか? 持っていきたい項目は、名前・住所・性別・メールアドレス・コメントです。 漠然としていて申し訳ありませんが教えてください。よろしくお願いいたします。

    • 締切済み
    • CGI
  • メール送信フォームで、メールが白紙で送られてしまう

    フォームを使って、下のような簡単なメール送信フォームで試したのですが、メールは送信できるのにその内容が白紙で送られてしまいます。(メーラーやブラウザにもよるのでしょうか?ちなみにメーラーは手裏剣2、ブラウザはIE5.5のSP2を使っています。) <FORM METHOD=POST ACTION="mailto:***@xxx.yyy.zzz"> <DIV>名前: <INPUT TYPE=text NAME="NAME" SIZE=20></DIV> <DIV>感想: <INPUT TYPE="text" NAME="TESTMSG" SIZE=20></DIV> <INPUT TYPE=submit VALUE=" 送信 "> <INPUT TYPE=reset VALUE=" 取消 "> </FORM>

  • postmailの確認画面でプルダウンの選択内容を表示させたい

    http://oshiete1.goo.ne.jp/qa4282501.html 昨日、上記の件で質問させていただいて送信先をプルダウンメニューで振り分けることには成功しました。 htmlの方では下記のように番号で振り分けています。 ---------------------------------------- <select name="ご住所(都道府県)"> <option value="" selected="selected">選択してください</option> <option value="0">東京都</option> <option value="1">神奈川県</option> <option value="2">千葉県</option> </select> ---------------------------------------- しかし、こうしたときに確認画面へ進むと【ご住所(都道府県)】の部分では当然数字が表示されてしまいます。 そこで確認画面でも東京都であれば、東京都と表示させたいので、 ---------------------------------------- <select name="ご住所(都道府県)"> <option value="" selected="selected">選択してください</option> <option value="東京都">東京都</option> <option value="神奈川県">神奈川県</option> <option value="千葉県">千葉県</option> </select> ---------------------------------------- と設定し直し、CGIの方で、 ---------------------------------------- if ($right == "東京都") {$mailto = 'aaa@xxx.com';} elsif ($right == "神奈川県") {$mailto = 'bbb@xxx.co.jp';} elsif ($right == "千葉県") {$mailto = 'ccc@xxx.ne.jp';} --------------------------------------- と書いて、振り分けるようにしました。こうしたところ、一回目の送信はうまく出来ているようですが、2回目、3回目となると、1回目送信したところに送られて振り分けることが出来ませんでした。 お分かりになる方、お教えいただけますか?

    • ベストアンサー
    • CGI
  • アクセスの行結合

    国     県   住  名前 日本    東京都 ○○ ・・・・ 日本    東京都 ○✖ ・・・・ 日本    東京都 ・・・・ ・・・・ 日本  東京都 ・・・・ ・・・・ アメリカ ワシントン ・・・・ ・・・・ アメリカ ワシントン ・・・・ ・・・・ アメリカ ワシントン ・・・・ ・・・・ アメリカ ワシントン ・・・・ ・・・・ クエリで国と県をテーブル1から 住所と名前をテーブル2からもってきて 上記のように表示させたときに エクセルのセルの結合のように 国   県       住所 名前 日本  東京都      ○○ ・・・・          ○✖ ・・・・          ・・・・ ・・・・          ・・・・ ・・・・ アメリカ ワシントン   ・・・・ ・・・・              ・・・・ ・・・・              ・・・・ ・・・・            ・・・・ ・・・・ というように国、県のダブっている文字をまとめて表記することはできますでしょうか? ずれてしまい申し訳ありません。

  • EXCELから1行を1枚の用紙に印刷する

    EXCELで作った名簿があります。 左から、氏名・住所・電話番号といった列があり次のようになっています。 氏名・  住所・         電話番号     東京一郎 東京都東京区東京町1-1 999-9999-9999 東京二郎 東京都東京区東京町1-2 999-9999-9998 東京三郎 東京都東京区東京町1-3 999-9999-9997   ・   ・   ・ 約100件ほどです。 この名簿で、1人分のデータ(1行分)を小さな紙 (A6) の1枚にそれぞれ印刷したいです。 例えば 1枚目に 氏名   東京一郎 住所   東京都東京区東京町1-1 電話番号 999-9999-9999 2枚目に 氏名   東京二郎 住所   東京都東京区東京町1-2 電話番号 999-9999-9998 3枚目に 氏名   東京三郎 住所   東京都東京区東京町1-3 電話番号 999-9999-9997    ・    ・ というようにです。 プリンターはA6でも打てるので大丈夫です。 各項目は太い罫線でかこみたいです。 件数は入力されているデーター分自動的にプリントできれば有難いです。 EXCELの機能、またはフリーウェア等でうまくできる方法を教えてください。 よろしくおねがいします。

  • 行数分をワークシート挿入する

    こんにちわ。 名簿を作っています。 Sheet1に管理番号、住所、名前等のデータがあります。 <Sheet1> 管理番号 住所     名前     電話番号 S0001   東京都・・・  ●山●子  XX-XXXX-XXXX S0002  神奈川県・・・ ●田●男 XXX-XXX-XXXX S0003  埼玉県・・・  ●川●子 XXXX-XXX-XXXX この住所録を、各シートにコピーをしようと考え、管理番号をシート名にして、行数分のワークシートを増やそうと思っています。 下記のVBAを作成してみたのですが、空のワークシートが最初のS0001(ワークシート1つ分)しか作成されません。 Sub 住所録() Dim iRow as Variant iRow = 1 Do Until Cells(iRow, 1).Value = "" ActiveWorkbook.Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = Cells(iRow + 1, 1) iRow = iRow + 1 Loop Sheets("Sheet1").Select Range("A1").Select End Sub Sheet1のデータ行数分、シートを増やすにはどのようにしたらよいでしょうか。 住所録は都度増えていきます。 どなかたご教示願います。 よろしくお願いします。

  • CGIから受けたメールを管理したい

    現在、HPから登録されたユーザ情報が自分のメールに来るようにしてあるのですが、そのデータをAccess等におとして管理したいと思っております。 メールに送られてくるのは各項目毎に例として 住所=東京都新宿区 名前=鈴木 電話番号=0300000000 のようにフィールド毎に改行されたものできます。 これをユーザ情報としてレコード単位に管理したいのです。そういったツールを作成すればいいのですが、作っている時間とスキルがありませんので何かいいツールもしくは方法があればぜひ教えてください。 宜しくお願い致します。

  • SQL文 抽出条件 複数の場合のやり方

    下記のような状況では どのようにSQL文を書けばよいのか教えてください。 例) テーブルA 氏名ID 住所 12345 東京都XXX区XXXX町1-1-1 12346 埼玉県XXX市XXXX町1-2-1 ・・・ テーブルB 住所(詳細に記載されているものもあれば、都道府県レベルのものもある) 東京都XXX区XXXX町 東京都▲▲区○○ 北海道 埼玉県◆◆市 ・・・ テーブルBに書いていある住所で始まる 全ての氏名IDを テーブルAから取り出したい。

  • メールフォームでのラジオボタンが使えない

    お世話になります。回答が得られず、再質問になります。 関西電力のインターネットサービス「eo光」に契約しており、同社のサービスでメールフォームを提供しているので、これを利用して、友人に連絡先を書き込んでもらうメールフォームを作成中ですが、全くの素人なのでどうにもうまく動作しない部分があります。 下記の記述をしてHPを立ち上げているのですが、ラジオボタンもしくはチェックボックスの部分がメールの中に反映されません。(例ではチェックボックスを作ろうとしています。) その他の項目についてはなんとか受け取ることができるのですが、チェックボックスをうまく動作させる方法を教えていただけないでしょうか。よろしくお願いいたします。 <FORM ACTION="http://cgi.eonet.ne.jp/cgi-bin/mail.cgi?user=tokumei" METHOD="POST"> <INPUT TYPE="hidden" NAME="mail_to" VALUE="tokumei@***et.ne.jp"> <INPUT TYPE="hidden" NAME="from" VALUE="tokumei@***et.ne.jp"> <INPUT TYPE="hidden" NAME="defsubject" VALUE="blank"> <INPUT TYPE="hidden" NAME="url" VALUE="http://www.eonet.ne.jp/~私のID/thanks.html"> 下記のフォームに入力して送信ボタンを押してください。<BR> <BR> お名前(漢字):<BR> <INPUT TYPE="text" NAME="name" SIZE="50"><BR> お名前(かな):<BR> <INPUT TYPE="text" NAME="message" SIZE="50"><BR> お名前(旧姓):<BR> <INPUT TYPE="text" NAME="message" SIZE="50"><BR> 電話番号:<BR> <INPUT TYPE="text" NAME="message" SIZE="50"><BR> E-mailアドレス(PCからのメールを受信できるアドレスを指定してください。):<BR> <INPUT TYPE="text" NAME="email" SIZE="50"><BR> メッセージ:<BR> <TEXTAREA NAME="message" ROWS="5" COLS="60"></TEXTAREA><BR> <br> 同窓会への出欠についてご意向を選択してください。<BR> <select size="1" name="message"> <option value="■意向:絶対行く">絶対行く</option> <option value="■意向:予定が合えば行く">予定が合えば行く</option> <option value="■意向:あまり行きたくない">あまり行きたくない</option> <option value="■意向:行かない">行かない</option> </option> </select><br><br> ■同窓会名簿で公開する項目を選択してください。 <INPUT type="checkbox" name="item1"value="氏名">氏名 <INPUT type="checkbox" name="item2"value="住所">住所 <INPUT type="checkbox" name="item3"value="電話番号">電話番号 <INPUT type="checkbox" name="item4"value="メールアドレス">メールアドレス <br> <INPUT TYPE="submit" VALUE="送 信"> <INPUT TYPE="reset" VALUE="リセット"> </FORM> 投稿日時 - 2012-11-23 23:46:28通報する

  • メール送信 CGIについて

    http://www.auone-net.jp/support/hp/infocgi/case2/mail/index.html こちらに使い方が書いてあるのですが、本文の内容が <textarea name="value00" cols="30" rows="5"></textarea> このままですと value00:愛知 value01:佐藤 ・ ・ ・ になってしまいます。 これでは項目名が分からないので ここから 住所:愛知 名前:佐藤 としたいのですが出るのでしょうか? それとタイトルを送信者ではなく固定で決めたいのですが、 <input type="text" name="subject"> これから設定できないでしょうか?

専門家に質問してみよう