5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Perlについての質問箱 9箱目

1 :デフォルトの名無しさん:04/03/13 02:55
"The duct tape of the Internet"こと、
Perlについての質問箱です
"There's more than one way to do it"ということで
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc2.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
WEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。

過去ログは>>2-4あたり

952 :デフォルトの名無しさん:04/05/23 13:47
ファイル名とか、システムコール/APIに渡す文字列をエンコード/デコードする仕組みがどうって話しじゃないの?

ストリーム中のデータはPerlIOが処理してるれるけど、それじゃなくて。

953 :948:04/05/23 23:42
私もとりあえず自分で SJIS 変換してごまかしたんですけど、
それだと結局、ファイル名に SJIS にない Unicode 文字使われた時に File::Find::find が
おかしくなるとか、結構ツライんですよね。

個人的にはいらないんですけど、Win だと意識せずにファイル名に使ってる人とかいるんで。

open のファイル名では使えたような気がしたんですけど、今ためしたらダメでした。

なるほど、現時点の Perl では、ストリームI/O でしか Unicode を意識してないって事ですか?
それならそれで判断しやすいんで、当面は自分でコード変換しますけど・・・。

そもそも Win 版は ANSI 版の API しか使ってないのかな。
最近 Win では ActivePerl しか使ってないけど、本体を自分でビルドしたら変わるかもしれないですね。
ヒマできたら調べてみよ・・・

954 :948:04/05/23 23:49
そういえば、find については、普通の SJIS 文字でもおかしくなった事がある気がします。
別の原因だったかもしれないですけど。

955 :948:04/05/23 23:52
たびたびスンマソン。
私の勝手な思いとしては、変換というよりは、システムコールが Unicode 対応なら
そのまま渡すと思っていたんですが、結局はそうじゃないんですね?

956 :デフォルトの名無しさん:04/05/24 01:05
Perl自体がUnicode対応でも、モジュールが全てそうだというワケではないよ
File::Findについては調べてないけど


957 :325:04/05/24 10:54
>>938
オライリーの本、そんなにわかりにくいとは思わないけど。。。
オブジェクト指向perl勉強しようと思ってマスターコース読んだけど、
イマイチしっくりこず、「実用perlプログラミング」読んで目から鱗でした。

958 :教えてモンゴメリー伯爵:04/05/25 01:24
たとえばだ CSV形式のデータ 1,2,3,4,
               a,b,c,d
              あ,い,う,え
というデータがあるとしよう。
これをだな
              1,a,あ
              2,b,い
3,c,う

というふうにしたいわけだが....
どうしたらいいのじゃ



959 :教えてモンゴメリー伯爵:04/05/25 01:27
明日またくるからなー

960 :デフォルトの名無しさん:04/05/25 03:15
>>958
@csvData1 = split (/,/, $csv1);
@csvData2 = split (/,/, $csv2);
@csvData3 = split (/,/, $csv3);

for ($i=0; $csvData1[$i]; $i++) {
$newData = join (',', ($csvData[$i], $csvData[$i], $csvData[$i]));
push @newCsvData, $newData;
}

実際動かして試してないから、わからんが、
これで行けんだろ。
眠いから寝る。

961 :デフォルトの名無しさん:04/05/25 03:17
>>960
間違えた。
>$newData = join (',', ($csvData[$i], $csvData[$i], $csvData[$i]));

ここの所。
$newData = join(',', ($csvData1[$i], $csvData2[$i], $csvData3[$i]));
へ変更。

962 :デフォルトの名無しさん:04/05/25 06:48
このスレのやつらはどんなエディタつかってんだ?


スレ違い?

963 :デフォルトの名無しさん:04/05/25 07:48
大昔 WordStar
昔  Vz
今  Meadow

964 :デフォルトの名無しさん:04/05/25 08:21
emacs cperl-mode

965 :デフォルトの名無しさん:04/05/25 10:13
サクラエディタ

966 :デフォルトの名無しさん:04/05/25 11:09
Jedit

967 :デフォルトの名無しさん:04/05/25 11:20
vi
って、なんか上の方にも似たような話なかったか


968 :デフォルトの名無しさん:04/05/25 11:25
別に埋め立てるためだからって
手垢のついた話題、無理に持ち込まなくてもいいぞ

969 :デフォルトの名無しさん:04/05/25 14:21
> aaa.pl *.txt
と指定したとき、ファイル名の大文字・小文字の違いを無視して
ファイルを読み込ませる方法ってありますか?


970 :デフォルトの名無しさん:04/05/25 14:38
>>969
意味ふめー

> aaa.pl *.txt
でどうになって欲しいの? (どこがまずいの?)

971 :名無しさん@初回限定:04/05/25 14:54
拡張子が、txt、TXT、Txtみたいに大文字小文字がバラバラでも、
*.txtって指定したら全部対象になるようにしたい。

元々がDOS使いの人間で、ファイル名の大文字小文字の違いを意識してなかった。
おかげで、*.txtって指定して、*.TXTが処理してなかったというテイタラクをしてしまった…

972 :デフォルトの名無しさん:04/05/25 14:57
>>971
シェルが処理すべき問題で、Perlが処理すべき問題じゃない
readdir()とかと正規表現使えば出来ない事は無いけどな


973 :デフォルトの名無しさん:04/05/25 15:03
while(<*.{txt,TXT}>){print "$_\n"} じゃだめか?カッコ悪いかそうか。

974 :デフォルトの名無しさん:04/05/25 15:18
>>971
aaa.pl *.[tT][xX][tT]

975 :デフォルトの名無しさん:04/05/25 15:29
>>973
カッコ悪くはないです。

拡張子といっても、3文字だけでも大文字小文字の組み合わせで8種類あるし、
txt、htm、doc、cntなど色々とあるので、もう少し流用しやすい方が嬉しい。

まぁ、txTなんて拡張子をつける人なんて考えられないけど、人のやることだし…

>>974
こんな手があるとは…
ってことは、973の {txt,TXT} を [Tt][Xx][Tt] とする手もアリですね。

976 :デフォルトの名無しさん:04/05/25 16:22
最近のPerlの文字コードサポートについて解説したページを紹介してもらえますか?

977 :デフォルトの名無しさん:04/05/25 16:32
File::DosGlobは?
$perl -MFile::DosGlob=glob -e 'print <*.txt>'

>>972さんが言っているように、aaa.pl *.txtと打ち込んだ時、
*.txtを展開しているのはPerlじゃなくてシェルだから、解法は
シェルの機能に依存しちゃうので厳密に言えば板違いかも。

978 :デフォルトの名無しさん:04/05/25 17:09
Perlのパーサーは他のスクリプト言語と比べても重そうなのに、
どうしてPerlはこんなに速いんでしょうか。

979 :デフォルトの名無しさん:04/05/25 19:11
とりたてて速いという程でも。
ユーザーが多いからそんだけバグも早くつぶれるし、
色々口出し^H^H^H助言してくれる輩もいるから、
自然と処理系も最適化されるんじゃないの。

980 :教えてモンゴメリー伯爵:04/05/25 22:06
>>960
960よ あっぱれじゃ見事処理できたぞよ
              
ほうびをやろう   これほうび→ (ω)

981 :デフォルトの名無しさん:04/05/25 22:59
>>978
プリコンパイル方式だからとかそういう話でなくて?


982 :デフォルトの名無しさん:04/05/25 23:09
パーサなんてどれも速度かわんねーだろ

983 :デフォルトの名無しさん:04/05/25 23:19
C にしたってコンパイルが遅いのは、普通は毎回巨大なヘッダをコンパイル
しててるとか最適化のせいでしょ。そもそも Perl はネイティブコードのジェネレートも無いし。

何万行もあるコードかいたらそれなりに遅いとおもうけど、普通のスクリプトのサイズじゃ
たかが知れてるわな。

984 :デフォルトの名無しさん:04/05/25 23:20
未だにPHPは速いとか言ってる人いるのかなあ

985 :デフォルトの名無しさん:04/05/26 00:13
PHPは速い

986 :デフォルトの名無しさん:04/05/26 11:52
>>985
はいはい

987 :デフォルトの名無しさん:04/05/26 12:31
webPron板に行けばPHPが早いって言ってるヤツいぱーいいてる。


988 :デフォルトの名無しさん:04/05/26 14:03
VBとPerlに詳しい方教えて下さい。
VBでPowerPointを操作するVBAをマクロ記録機能を使って作ったのですが、
これをPerlに置き換えられなくて困っています。
わかる方がいたら教えて下さい。

ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:="D:\test\test.bmp", LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=75, Top:=-74, Width:=570, Height:=689).Select
With ActiveWindow.Selection.ShapeRange
.Fill.Transparency = 0#
.Height = 344.62
.Width = 285.12
End With
With ActiveWindow.Selection.ShapeRange.ActionSettings(ppMouseClick)
.Hyperlink.Address = "D:\test\test.bmp"
.SoundEffect.Type = ppSoundNone
.AnimateAction = msoFalse
End With
With ActiveWindow.Selection.ShapeRange.ActionSettings(ppMouseOver)
.Action = ppActionNone
.SoundEffect.Type = ppSoundNone
.AnimateAction = msoFalse
End With

環境は
Pen3:1GHz
Memory:2GB
OS:Windows2000Professional
Soft:MSPowerPoint2002SP-2
    ActivePerl5.6.1.635
です。

989 :デフォルトの名無しさん:04/05/26 17:03
そろそろ次スレ誰か立ててくり。
俺は立てられないので。

990 :デフォルトの名無しさん:04/05/26 18:48
http://pc5.2ch.net/test/read.cgi/tech/1085564875/
新スレ

991 :デフォルトの名無しさん:04/05/26 19:06
>>990
乙!

992 :デフォルトの名無しさん:04/05/26 23:26
>>988
ひょっとして、全くやり方がわからんから、お前ら Perl で書いてアップしろって言ってるのか?
だったら、とりあえず \Perl\html\faq\Windows\ActivePerl-Winfaq12.html でも読めよ。

5.6.x にはこのファイルないかもしれんけど。無かったら 5.8.3 入れてドキュメントだけ見なよ。


がんばって書いてみたけど思ったように動かないなら、どう書いたのか書きなよ。

大体が、Perl でそれを書いたとして、できるのは実行した時に開いてるファイルに対する
処理だけなんだけど、それでいいのか?

993 :988:04/05/27 10:28
>>992

Perlを使ってPowerPointでいくつかのグラフや画像をスライドに貼り付けていく作業の中で
「マウスクリック時の動作として指定ファイルのハイパーリンクを開く」
というのだけがどうしてもうまくいかないのでその部分の記述を教えて欲しくて書き込みました。

ドキュメントは5.6.xにもあるので見てみました。
OLDでの基本的なExcelやWordの動きのサンプルが載っていましたが
今回のものにはあまり参考になりませんでした。
一応これまでもPowerPointでグラフを挿入したり、
Excelで表を作りその文字列に同ブック内別シートの
指定セルへのハイパーリンクとかはやっているのですが、
どうにも今回のPowerPointでスライドに貼り付けた画像に
ハイパーリンクを設定するという作業がうまくいきません。

my $ppt = Win32::OLE->new('PowerPoint.Application') or die "PowerPoint start Error";
my $doc = $ppt->{Presentations}->Add(msoTrue);
$ppt->ActivePresentation->Slides->add(1,1);
my $pic_file = 'C:\test\test.bmp';
my $NewPic = $ppt->ActivePresentation->Slides(1)->Shapes->AddPicture($pic_file, 0, 1, 225, 115, 285, 345);

これでPowerPointの起動からスライドを1つ作ってそこへ画像の貼り付けまで出来ます。
この続きでその貼り付けた画像をマウスでクリックした時の動作として
その画像をハイパーリンクで開くという事をしたいのです。

my $NewMouse = $NewPic->ActionSettings(ppMouseClick);
$NewMouse->{Hyperlink}->{Address} = $pic_file;

こんな感じとかいろいろやってみているのですがマウスクリック時の動作の設定は全く変わりません。
その設定方法を教えて欲しいのです。
開いているファイルに対する処理の記述だけで結構ですので宜しくお願いします。


994 :デフォルトの名無しさん:04/05/27 12:15
print (1=>2=>3=>4=>5);
これは仕様ですか?というかリストのセパレータはカンマじゃなくて
=>でもいいのね

995 :デフォルトの名無しさん:04/05/27 12:19
記念カキコ v(^-^=)

996 :デフォルトの名無しさん:04/05/27 12:19
あと、これがエラーになってしまうのはどうしてでしょうか?
perl -e 'print (1=>2=>3=>4=>5)[4]'
perl -e 'print $tmp=(1=>2=>3=>4=>5)[4]' これならOKです

997 :デフォルトの名無しさん:04/05/27 12:55
>>994
http://perldoc.com/perl5.8.4/pod/perlop.html#Comma-Operator

>>996
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldata.html#List_value_constructors
http://perldoc.com/perl5.8.4/pod/perlop.html#Named-Unary-Operators

998 :デフォルトの名無しさん:04/05/27 13:07
>>997
http://perldoc.com/perl5.8.4/pod/func/die.html

999 :デフォルトの名無しさん:04/05/27 13:21
>>996
print(1=>2=>3=>4=>5) [4]
最初の括弧が関数の引数の括弧になっている。
print 関数に引数に 1=>2=>3=>4=>5 を渡して、
print 関数の戻り値の[4]番目を参照してエラーになってる。

print "", ( 1=>2=>3=>4=>5 )[4] なら大丈夫

1000 :1000:04/05/27 13:24
># シンタクスエラーとなる
>$time = stat($file)[8]; # おおっと、括弧を忘れた
print ((1=>2=>3=>4)[3]);
これでいいということか、なるほど。

=>はComma演算子と同義語だけど、その左辺値に対しては
Stringとして解釈されることを強制するわけね。
ハッシュではなくて、普通のリストに=>を使ったら、一番右の値以外の全てが
文字列になるということなのかな?

と、送信しようと思ったら>>999レスありがとうございます。
>最初の括弧が関数の引数の括弧になっている。
なるほど。
print +(1=>2=>3=>4)[3];
これでもOKでした。

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

272 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)