• 締切済み

CGI出力での改行位置について

表形式のデータをエクセルからテキストファイルでFTPし、そのデータをCGIで表示するものを作成中です。 FTPまで8割くらいできたところで、CGI(perl)に取り掛かり、まず、データの読み込みが出来ていることを確認するために、読んだデータをそのまま打ち出すルーチンをつくり、小さなデータで実行してみたところ以下の事象が起こりました。 ---- perlのコード(部分) ---- foreach $line (@lines) { @a = split(/,\t/, $line); foreach $a (@a) { print "<$a> "; } print "<br>\n"; } ------------------ @linesはデータの項目群(1行分)のイメージです。項目の区切り文字として「,\t」を使用しています。 ---結果のブラウザ表示の例(一部)--- <[Format]> <#FFFFFF> <#555555> <#F8F8FA> <true > ---------------------------- 表示された最後の項目(上例の場合true)の後にスペースが開いてしまいます。 いろいろ調べたところ、データには異常ない(スペースはない)ですし、試行錯誤して最後に気がついたのがブラウザ表示のソースを見ること ---ブラウザのソース--- <[Format]> <#FFFFFF> <#555555> <#F8F8FA> <true > <br> --------------------- となっており、ソースの改行がスペースの原因ということまではわかりました。 また、上記例は5項目ですが、行により項目数が違いますが、全行とも必ず最後の項目の右括弧(>)の前で改行されてしまっています。 CGI側からの出力は<br>の後の改行だけだと思っているのですが、なぜ最終項目だけ改行がはいるのでしょうか? しかも>の前に・・・ データはちゃんと読めているようなので、作業をすすめる上では問題ないのですが、どうも気になりますのでどなたかヒントをお願いします。(なお、サーバはUNIXのはずです。)

  • Perl
  • 回答数1
  • ありがとう数5

みんなの回答

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

@line にファイルから読み込んだデータがそのまま入っているのでは ないでしょうか。例えば、こんな感じで @line = <> ; そうであれば、chomp @line として各行にある行末の改行をとればよい です。

fujillin
質問者

お礼

気が付きませんでした。おはずかしい。 多分その通りですね。お手数かけました。

関連するQ&A

  • CGIで改行タグを改行コードに変換ってできますか?

    CGIで改行タグを改行コードに変換ってできますか? $text =~ s/\r\n/<br>/g; $text =~ s/\r/<br>/g; $text =~ s/\n/<br>/g; で確認画面上で表示されるtextareaの文章は改行されるのですが、 届いたメールには<br>と表示されてしまって困ってます。 PHPでは変換できるみたいなのですが、perlでも出来るのでしょうか?

    • ベストアンサー
    • CGI
  • スペースは残し改行のみ削除するには?condenceWhite

    テキストフィールドに外部ファイルからテキストファイルを読み込んでいます。 例えば次のようなhtmlタグを含む外部ファイルを読み込みたいとき(アンダーバーはスペースとして見てください) text= 2007.1.1_ほげほげ<br> _________ほげほげ2<br><br> 2007.1.2_ほげほげ<br> _________ほげほげ2 condenceWhite = falseであれば、<br>も含め改行が二回入り、 ================================= 2007.1.1 ほげほげ ________ ほげほげ2 2007.1.2 ほげほげ ________ ほげほげ2 ====================================== と表示されると思います。 改行が二回入るのを防ぐために、condenceWhite = trueにすると、今度は、スペースが消されて ================== 2007.1.1 ほげほげ ほげほげ2 2007.1.2 ほげほげ ほげほげ2 ================== となると思います。 スペースを消さずに余分な改行だけ消す良い方法はないのでしょうか?

    • ベストアンサー
    • Flash
  • jsp 改行コードで改行させて表示したい

    はじめまして。 PostgreSQLから読み込んだ文字列データを表示させるtomcat+struts+servlet/jspを作成中です。 データの文字列に含まれる改行が、クライアントに表示された際に反映されず困っています。 過去ログも調べ、近い質問はありましたが、僕とは内容が微妙に違うようで、改めて質問させていただきました。 例えば、あるテーブルのある項目に、 A B C というデータ(A,Bそれぞれの後に改行のある3行の文字列)があるとします。 これを読み込みaction form bean(と言うのですか?setter/getterを定義する関数です)を介してjspに埋め込むと、できあがるhtmlでは、 ABC と改行されずに表示されます。 htmlで改行させるには「<BR>」が必要なのかと、データ文字列に0x0dや0x0a、または0x0d+0x0aがあれば「<BR>」に置き換えてaction form bean(?)のsetterに渡してjspを作ると、今度は、 A<BR>B<BR>C と「<BR>」が文字列として表示されます。 htmlをソース表示すると、「A&lt;BR&gt;B&lt;BR&gt;C」で、親切にも「<」「>」をそれぞれ「&lt;」「&gt;」に勝手に置き換えあくまで文字列として表示してくれるようです。 試しに改行コードを「&lt;BR&gt;」に置き換えても予想通りその部分は &lt;BR&gt; とそのまま表示され、そのソースは「&amp;lt;BR&amp;gt;」でした。 「<」や「&lt;」等をそれぞれ「&lt;」「&amp;lt;」のように置き換える作業は、どこが行っているのでしょうか。 また、改行位置で改行させるにはどうすればよろしいでしょう。 OSはwindowsXPです。 無知ゆえに、つまらないことで悪戦苦闘しているのかも知れませんが、経験も浅くてよく解りません。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • PHP 改行

    phpをはじめたばかりの初心者です。 <?php print('1行目の分'); print("\n"); print('2行目の分'); ?> と打ち、そのファイルをアップロードし、ブラウザで確認しても 改行がされていませんでした。 調べてみると、htmlで表示させるには<br />が必要みたいな事があったので、 print("\n"); を print("\n<br />"); と、<br />を適当に入れてみたら改行されましたが 何か釈然としません。 であればそもそもPHPの改行を表すprint("\n");は何のためにあるのでしょうか? print("\n");だけでは改行表示がされないのは、どういう風に考えればいいのでしょうか? その考え方を教えて下さい。 print("\n");は単体で使う事はあるのでしょうか?

    • ベストアンサー
    • PHP
  • 表(<table>)の直前が、改行されてしまう。

    表(<table>)の直前が、改行されてしまう。 perlでコーディングしています。データベースはmdbファイルです。 <textarea>内を簡単なWebエディタに見立てて、 <textarea>内へhtmlタグなどで書き込んだデータを、 mdbのメモ型フィールに更新し、これをブラウザで表示させています。 このとき、表(<table>)を表示させるために、<textarea>内に<table><tr><td>タグを入力するのですが、mdbファイルに更新する際に、 <table> <tr> <td>   : のように、改行した状態で更新すると、書き込んだ改行分だけ、ブラウザに表示された表の直前が改行されてしまいます。 (mdbファイルに直接書き込んでも同現象となりました。) <table<tr><td>・・・ と改行せずに書き込むと、ブラウザに表示された表の直前は改行されませんでした。 なお、ブラウザに表示させる側のcgiファイルには、改行キー(¥nなど)を改行タグ(<br>)に変換させるために、   $textarea1 =~ s/\r\r/<br>/g;   $textarea1 =~ s/\r/<br>/g;   $textarea1 =~ s/\n/<br>/g; としているため、これと関係していると思われるのですが、 わたくしとしては、  ●<textarea>内で手入力した改行は、ブラウザ表示に反映させるが、  ●<tabel>・・・・</tabel>の部分は、改行して入力されていても、この改行だけは無視する、 と言った、都合のよいことをしたいのですが・・・、行き詰っております。 perlやcgiの問題ではないかも知れませんが、 どなたか、よいアドバイス、ご提案などございませんでしょうか。 ご教授いただければ、大変助かります。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIで新着順に表示させたいのですが上手くいきません。

    CGIで新着順に表示させたいのですが上手くいきません。 http://www.wackyfactory.net/cgi/todo.txt こちらのCGIを使わせてもらっているのですが、古い順に表示されてしまいます。 425行目の foreach (@PICKUP) { を foreach (reverse(@PICKUP)) { に変更し、そのページ内では新着順になったのですが 件数がたまり2ページに増えると新着の項目が2ページ目に表示されてしまいました。 良ければアドバイスなど頂けると有り難いです。

    • 締切済み
    • CGI
  • 改行について

    複数行のフォームタグより送信されてきた、複数行の内容を改行ごとに<BR>を入れてファイルに保存して、 保存したファイルを読み込んで、<BR>を改行に変えて、複数行のフォームに表示したいのですが、どうすればいいのでしょうか?

    • ベストアンサー
    • PHP
  • テキストファイルを読み込み出力で文字化け

    まだパールを始めたばかりの初心者ですがよろしくお願いします。 現在cgiをPerlで記述します。 「|」区切りのテキストファイルを行ごとに読み込みsplitを利用して項目別に区切っています。 そしてそれをhtmlで項目別にテーブルに表示するというのをやっているのですがテキストファイル中に「鋼」という文字があると「・br>」という表示になり勝手にそこで区切られて以降違う項目になってしまいます。 それ以外はうまく表示出来ますし前後にスペースやメタ文字があったりとかではなく「鋼」を消すとうまく表示出来ます。 処理はこんな感じです。 ~テーブル内部~ open(IN, a.txt); @getline = <IN>; foreach $linedata (@getline) {  chop $linedata;  (@importdata)=split /\|/, $linedata;  print "<tr>";  foreach(@importdata){  $_=~ s/\n//g;  $_=~ s/\r//g;  print "<td>".$_."<br></td>"; } print "</tr>"; 解決法方が分かる方、教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • TEXTAREAの改行がうまくいきません。

    自作で掲示版を作成している、初心者です。現在作成中の掲示版にTEXTAREAに入力し、LOG上では1行目<BR>2行目といった形で改行をBRに置き換えて保存していますが、その修正としてLOGからデータをとり改行状態で表示させたいのですが、 うまく改行されない状態です。下記にLOGより読み込み。タグを\rに置き換えて いますが、TEXTAREAに表示されなく、改行表示どころではありません。 いったいどうすればよいのでしょうか?ご教示をお願いします。 <CGI文> $wkaaa1 = $IXUSERINF{Enaiyo}; データを取得 $wkaaa =~ &notag1($wkaaa1);  変換(これがおかしい?) $mesbuff .= "<TR><TD nowrap ><TEXTAREA ROW=\"10\" COLS=\"48\" NAME=\"Enaiyo\" WRAP=\"soft\">$wkaaa </TEXTAREA></TD></TR>"; <sub> sub notag1 { local($_) = @_; s/&/&amp;/g; s/"/&quot;/g; s/</&lt;/g; s/>/&gt;/g; s/&lt;br&gt;/\n/gi (これで <BR>を\n(改行)にしてるつもり return $_; }

    • ベストアンサー
    • CGI
  • [PHP]formのtextareaの改行を消せない

    [PHP]formのtextareaの改行を消せない formのtextareaに改行して数行のデータを入れ、それを改行毎にexplodeで分けて居るのですが、1個1個のデータから改行の情報が消えません。 textareaに 1234 2345 3456 $data=explode("\n",$_POST[textarea]) で、dataに配列として入れて、 echo $data[0] . "," . $data[1] . "," . $data[2]; と表示させてみると、 1234 ,2345 ,3456 と4ケタの数字のあとに半角スペースが入ります。 HTMLソースで見ると改行されているようです。 str_replace("\n","",$data[0]) とやっても、消えません。 この改行(半角スペース)があるため、 if (mb_strlen($data[0])==4) で、Trueにならなくて困っています。 if (mb_strlen($data[0])==4 or mb_strlen($data[0])==5) とすることで解決は出来るのですが、そのほかでも使用したいので、出来れば最初からこの改行(半角スペース)を消したいです。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう