電子書籍の厳選無料作品が豊富!

perlにてテキスト書き出しをしをしたとき
書き出したテキストファイルの先頭にどうしてもスペースが入ってしまうので
そのテキストを別のcgiにて読み込み表示するときに
先頭のスペースを削除しようとしていますがうまく行きません
多分スペースをパターンマッチさせるのだろうと思うのですが
いまいち私の理解が足らないようでぜひどなたか教えてください。

(1つ目のcgi)-------------------------------

フォームから入力$title $subtitle $contentsとしそれを下記のような形で読み込み(途中省略)
use CGI;
$query = new CGI;

$title = $query->param('title');
$subtitle = $query->param('subtitle');
$content = $query->param('content');

#タブ区切りにし@memoryに代入
@memory="$meday\t$title\t$subtitle\t$content\t$number\t$namberc\n";

open(FILE,">>../data/memory.txt")||&error("$datafile 外部ファイルが開きませんでしたエラー");
print FILE"@memory";
close(FILE);
-----------------------------

それを違うcgiのソースで読み込み------------------------------------

(2つ目のcgi)
open(IN, "< sys/data/memory.txt");
eval{flock(IN,1)};
@inbun=<IN>;


for($i=0;$i<@inbun;$i++){

@retudata=split(/\t/,$inbun[$i]);
$inbun[$i] =~ s/^\s+//g;
$retu =~ s/^\s+//g;

@retudata[$i]='$retu[0]\t$retu[1]\t$retu[2]\t$retu[3]\t$retu[4]\t$retu[5]\n';
;

}@data=@inbun;
open(FILE,">sys/data/memory.txt")||&error("../data/memory.txt 外部ファイルが開きませんでしたエラー");
print FILE"@data";
close(FILE);

close (IN);
---------------------------------------------------


追加するとなぜか先頭にスペースが入りどうしてもとれないんですが
どうしたら良いでしょうか?
ちなみに結果は下記のとおりです。

20121122test1test1test1あいうえおABCDEFG1112223157
20121122test2-rtest2-rtest2-rあいうえおABCDEFG21122231647
20121122test3test3test3あいうえおABCDEFG3112223254

乱筆乱文ご容赦ください。
宜しくお願いします。

A 回答 (2件)

> print FILE "@memory";


> ...
> print FILE "@data";

ダブルクォート文字列の中で配列を展開すると間に半角スペースを挟むので、配列が行で構成されている場合は2行目以降の先頭にスペースが付くことになります。他の部分にも多少問題がありそうなコードですが、とりあえず次のようにしてみては ... ?

print FILE @memory;
...
print FILE @data;
    • good
    • 0

あるいは、joinを使って区切り文字を明示して連結した文字列にするか。


print FILE join('',@data);


>eval{flock(IN,1)};
なんでevalするの?

> @memory="$meday\t$title\t$subtitle\t$content\t$number\t$namberc\n";
リストにスカラー代入してますけど?

> @retudata=split(/\t/,$inbun[$i]);
> $inbun[$i] =~ s/^\s+//g;
@retudataを作った後$inbun[$i]を変更しても@retudataに影響はありません。

> $retu =~ s/^\s+//g;
$retuはどこ?
先の「@retudata=split(/\t/,$inbun[$i]);」が「@retu=split(/\t/,$inbun[$i]);」の間違いみたいだけど
そうだとしても @retu と $retu とは別です。
また、このようなやりかたで@retuの全てを変更することはできません。
    • good
    • 0
この回答へのお礼

いろいろ出来てない部分がおおくてすいません
見直すとそのとうりでした
助かりました
むだなソースがおおくてすいませんでした。
まことにありがとうございます。

お礼日時:2012/11/26 01:02

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