トップページphp
1001コメント349KB

Perlコーディング初心者質問スレ Part 44

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2005/10/17(月) 00:47:17ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0951分かりません!2005/12/08(木) 00:23:26ID:zq2aWK4E
webアプリ初心者です;
調べたけどよくわからなかったんで質問させてください。
やりたいことはperlとDBを使用したアプリ作成です。DBはmysql、mdb
どちらかで考えています。
現在の環境
os:windowsXp
webサーバ:Apache

1:DBの配置場所が分かりません。どこのディレクトリに配置して
  どのような呼び出し方をするのでしょうか。(DBIでデータソース
  を指定するところ)



2:実際インターネットにのっけたとき、サーバはunixになると思うんですが
  そのときのDBの配置場所を教えてください。また、webサーバによって
  dbの配置場所、接続方法は変わるんでしょうか?



0952nobodyさん2005/12/08(木) 00:26:01ID:???
>>951
>>1を読もうね。
0953nobodyさん2005/12/08(木) 00:54:51ID:???
>DBの配置場所

メモリ上、又はファイル
0954nobodyさん2005/12/08(木) 01:00:14ID:/QVLECMb
CSV形式のファイルをダウンロードさせるCGIを構築しています。
主な流れは下記の通りです。

push(@dump, "あ,123,,,,,,,,,,,,\n");
push(@dump, "い,456,,,,,,,,,,,,\n");
push(@dump, "う,789,,,,,,,,,,,,\n");
 :
 :

print "Content-Disposition: attachment; filename=abc.csv\n";

my($sizeTmp);
foreach(@dump){
$sizeTmp .= $_;
}
my($size) = length($sizeTmp);

print "Content-Length: $size\n\n";
print "$downloadCsv";

ダウンロードはできるのですが、
lengthでファイルサイズが正しく取れていない??(おそらく)
それにより、ダウンロードしたCSVファイルを開くと
最後の方が欠けています。
よりよい方法や参考サイト等はございますでしょうか?
ご教授頂けたら幸いです。
0955nobodyさん2005/12/08(木) 01:06:06ID:???
$downloadCsv の内容を詳しく
09569542005/12/08(木) 01:10:27ID:/QVLECMb
>>955
申し訳ありません。一部訂正です。
$downloadCsvは下記の様になります。

my($downloadCsv);
foreach(@dump){
$sizeTmp .= $_;
}
my($downloadCsv) = length($sizeTmp);

print "Content-Length: $size\n\n";
print "$downloadCsv";
0957nobodyさん2005/12/08(木) 01:12:13ID:???
それだと $downloadCsv に $sizeTmp の長さが入っちゃって
数値だけの変なファイルがダウンロードされる気がするんだけど
09589542005/12/08(木) 01:14:09ID:/QVLECMb
申し訳ございません。ご指摘の通りでした。
再修正してみましたが、やはりDLしたCSVファイルが欠けてしまいます。

my($downloadCsv);
foreach(@dump){
$downloadCsv .= $_;
}
my($size) = length($downloadCsv);

print "Content-Length: $size\n\n";
print "$downloadCsv";
0959nobodyさん2005/12/08(木) 01:17:22ID:???
それだけじゃ原因が分からないなぁ
全体のソースとか無理かな
09609542005/12/08(木) 01:27:44ID:/QVLECMb
下記が実際に用いているものです。
内容は繰り返し部分を省いた以外はほぼそのままです。

<IN>:$in{data} = abc;(DLファイル名)

my(@dump);

push(@dump, "更新,$y/$m/$d,,,,,\n");
push(@dump, "記録,$hashDay{$in{'data'}}日分,,,,,\n");
push(@dump, ",,,,,,\n");
push(@dump, "更新,$y/$m/$d,,,,,\n");
 :
 以下繰り返し
 :

print "Content-Type: application/octet-stream\n";
print "Content-Disposition: attachment; filename=$in{data}.csv\n";

my($downloadCsv);
 foreach(@dump){
$downloadCsv .= $_;
}
my($size) = length($downloadCsv);

print "Content-Length: $size\n\n";
print "$downloadCsv";

exit;
0961nobodyさん2005/12/08(木) 01:41:13ID:VQhX6ruj
改行コードがlength()だと1で
printしたときは\x0D\x0Aの2になるとかじゃない?
ちゃんと調べてないけど

何バイト分足りないのか比べて見たら?
0962nobodyさん2005/12/08(木) 01:44:30ID:???
Content-Length って別に要らないだろ
進行状況のバーが無くなるぐらいだし
09639542005/12/08(木) 02:00:29ID:/QVLECMb
ありがとうございました。
とりあえず、Content-Lengthが無いとローカルでDLできない様なので
付ける方向で行こうと考えています。
DLするCSVのデータ中の改行に\x0D\x0Aを用いる事ができなかったので
下記の様にする事で問題を回避できました。

my($downloadSize);
my($downloadCsv);
foreach(@dump){

 my($downloadSizeTmp) = $_;
 $downloadSizeTmp=~ s/\n/\x0D\x0A/g;
 $downloadSize .= $downloadSizeTmp;

 $downloadCsv .= $_;
}
my($size) = length($downloadSize);

print "Content-Length: $size\n\n";
print "$downloadCsv";
0964nobodyさん2005/12/08(木) 02:05:27ID:???
ちなみに \x0D\x0A って \r\n のことだからね
09659542005/12/08(木) 02:18:27ID:/QVLECMb
なるほど。
\r\nはウィンドウズの改行コードだと思うのですが、
改行コード\nをウィンドウズのローカルにDLすると\r\nに変換されるのでしょうか?
現状では\nでDLしてもContent-Lengthが正しければ正常にDLできています。
0966nobodyさん2005/12/08(木) 02:20:59ID:???
つーか Content-Length ヘッダ無しでダウンロードできないって
どんなブラウザ使ってるんだ?
09679542005/12/08(木) 02:23:59ID:???
ブラウザはSleipnir 2 でIEのエンジンを利用してます。
やはり何度やってもContent-Lengthがないと
Internal Server Errorになります。
0968nobodyさん2005/12/08(木) 02:25:27ID:???
一部携帯では必須
0969nobodyさん2005/12/08(木) 02:27:15ID:???
>Internal Server Errorになります。

それ、
>print "Content-Length: $size\n\n";
この行をそのまま消したからだろ

>print "Content-Length: $size\n\n";

>print "\n";
に置き換えてみろ
09709542005/12/08(木) 02:29:20ID:???
なるほど。
ご指摘の通り、現環境ではprint "\n";で問題ありませんでした。
09719542005/12/08(木) 02:38:44ID:/QVLECMb
改行コードの事で一点気付いたのですが、
\nで処理しているデータは\r\nや\rなどDLする環境向けに
変換する必要があるのでしょうか?

現ローカル環境のWinでDLした際には問題なかったのですが、
その他の環境やMac環境むけにDLさせる場合は
\r等に置換しないと問題となったりする物なのでしょうか?
0972nobodyさん2005/12/08(木) 07:21:12ID:qoVbfW3N
abcdefgabcdef

こういった文字列が合った場合、2個目の abc にマッチさせたい場合の正規表現がわかりません。
行末にあれば abc$ でマッチできるんですが …
0973nobodyさん2005/12/08(木) 07:38:25ID:???
>>971
EXCELやある程度の機能があるエディタなんかは各種改行コードに対応しているので問題ない
メモ帳だと\nのファイルは1行で表示されるので問題あり。
0974nobodyさん2005/12/08(木) 09:19:32ID:???
>>971
何でもかんでも鵜呑みにせずウラを取ろうな。
http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
http://www.studyinghttp.net/rfc_ja/rfc2616.ja.xhtml.gz#Sec2.2
http://www.nilab.info/docs/cgi/draft-coar-cgi-v11-03-clean-jp.html#7.2.1

まともな HTTP サーバならヘッダ部の改行コードに関しては気を利かせて
くれるので "\n" で問題無い。ボディ部、今回の件だと CSV ファイルの
改行コードは >>973 の言う通りで、ファイルを読む人のソフトが特定できる
なら改行コードを合わせて吐いた方が無難。

>>972
my $str = "abcdefgabcdef\n";
for ('abc', 'def') {
  $str =~ s/(($_).*?)(\2)/ $1 . uc $3 /e;
  print $str;
}
0975nobodyさん2005/12/08(木) 09:23:44ID:qoVbfW3N
やっぱループさせないと無理ですか・・・
0976nobodyさん2005/12/08(木) 11:18:07ID:???
MacOSの改行コードが \r なのは9以前で
OSXからは \n だからね
0977nobodyさん2005/12/08(木) 13:24:04ID:???
>976
改行コードはどのプラットフォームでも\n。
\r→CR
\n→LF
としないと、意味不明。
09789542005/12/08(木) 13:51:47ID:/QVLECMb
ありがとうございます。
現状ではDLするのは主にWin環境です。
CSVエクセルファイルであるため、開くソフトはエクセルのみであると
想定出来るためソフト側に改行コードの対応は任せようと思います。
おそらくMacで用いる事はないと思うのですが、
支障があるようであれば改行コードをDL時に選択できるものに変更しようと思います。
0979nobodyさん2005/12/08(木) 14:31:43ID:???
俺はCSVはまずエディタで開くけどなぁ。
0980nobodyさん2005/12/08(木) 14:55:26ID:???
同じく
0981nobodyさん2005/12/08(木) 15:04:53ID:???
csvをダブルクリックすると秀丸が開く
0982nobodyさん2005/12/08(木) 17:02:49ID:qoVbfW3N
CSVをダブルクリックするとIEがダウンロードはじめるorz
0983nobodyさん2005/12/08(木) 18:00:29ID:???
そろそろ次スレよろ
0984nobodyさん2005/12/08(木) 18:27:53ID:???
次スレ立てる人は >>7 の URL を変更してね。

クックブック: http://www.oreilly.co.jp/books/4873112028/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi

Perldoc.com っていつも全然繋がらないんだけど、死んでる?
0985nobodyさん2005/12/08(木) 18:30:40ID:???
part31 と part32 で、dat がないって言われてるな。
>>984 以外に変更した方がいい URL があったら誰かよろしく。

# 俺は立てれなかった…。
0986nobodyさん2005/12/08(木) 18:53:17ID:???
テンプレ貼ってくれるなら俺が立てるが
0987nobodyさん2005/12/08(木) 19:21:50ID:???
>>621
http://user.ftth100.com/mirrorhenkan/perl/
0988nobodyさん2005/12/08(木) 22:16:12ID:7Tka8YnI
たまに覗いてるものです。
スレ立てに失敗しました。orz・・・

で、質問です。
perl5.8.0を使っていたのですけど、perl5.8.5をインストールしました。
ところが、
# perl -v と打ちますと
This is perl, v5.8.0 と返ってきます。

英語だからとテキトーに読み飛ばしてインストールしたせいだとは思うのですが、
後から、perl5.8.5をデフォルトで使用するにはどのようにしたらよいですか??
0989nobodyさん2005/12/08(木) 22:45:53ID:???
>>988
Perl に関係ない質問なので、ここでは答えない。

ヒント: which
0990nobodyさん2005/12/08(木) 22:47:35ID:???
スレを立てる
09919882005/12/08(木) 23:04:14ID:???
新スレ立てました
http://pc8.2ch.net/test/read.cgi/php/1134049707/


>>989
どこで質問したらいいですかねぇ。
知ってたら、もうちょっと教えてください・・・。
0992nobodyさん2005/12/08(木) 23:28:57ID:???
>>991

OSがLinuxならLinux板のくだ質スレ辺りで、経緯を説明して古いほうの
Perlをアンインストールしたいと聞けば良いんじゃないかな。保証は出来ないが…
0993nobodyさん2005/12/08(木) 23:29:02ID:???
>>991
UNIX板の自分が使ってるディストリスレ
つか今のままだとエスパー以外回答できない
0994nobodyさん2005/12/09(金) 00:04:36ID:???
perl5.8.2、Postgrewsqlを使っとりまして、正規表現に日本語を使いたくなったもんで、
ウェブで調べて、とりあえずuse encoding "euc-jp";と、してみたとです。
そしたら、DBテーブルからもってきた文字列だけ、出力時に
〜does not map to euc-jpと怒られるとです。DBもeuc-jpで作ってあるとです。
スクリプト内の日本語や、openで開くファイルは問題なかです。

どこに原因があるとですか。よろしく、おねげーしますだ。
0995nobodyさん2005/12/09(金) 11:59:04ID:???
何かむかつくのは俺だけか・・・?
0996nobodyさん2005/12/09(金) 12:14:53ID:???
>>994
そのDBから持ってきて出力時にエラーになる文字列とやらの
中身とutf8フラグの状態を調べるのが基本だと思うが。
0997nobodyさん2005/12/09(金) 16:30:40ID:???
Perlコーディング初心者質問スレ Part 45
http://pc8.2ch.net/test/read.cgi/php/1134049707/
0998nobodyさん2005/12/09(金) 16:35:39ID:???
ちんこー
0999nobodyさん2005/12/09(金) 17:18:03ID:???
1000取ったやつは死ね
1000nobodyさん2005/12/09(金) 17:24:52ID:???
Perlコーディング初心者質問スレ Part 45
http://pc8.2ch.net/test/read.cgi/php/1134049707/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。