Perl初心者スレ(マジレス回答)
2012/10/07(日) 00:48:39.00
どうぞー
427デフォルトの名無しさん
2018/08/03(金) 22:49:39.26ID:G69i9RgI なんだろう? 計算式で質問投稿しようとするとNGワードエラーで拒否られてしまう orz
全角でもダメかー
全角でもダメかー
428427です
2018/08/04(土) 19:04:46.45ID:pEPpCry/ これで書けるかな?
代入計算式のソースと書きたかった質問内容をマンゴースレに貼りました。
https://agree.5ch.net/test/read.cgi/mango/1532726276/421-422
代入計算式のソースと書きたかった質問内容をマンゴースレに貼りました。
https://agree.5ch.net/test/read.cgi/mango/1532726276/421-422
429427です
2018/08/04(土) 19:09:36.61ID:pEPpCry/ >428 の書き込みで、本来続きだった リンク先 >422 の
16進〜解説お願いできませんでしょうか?
の文章内だけでもNG含んでるとか・・・・プログラム技術板・・コミュニケーション終わってね?
16進〜解説お願いできませんでしょうか?
の文章内だけでもNG含んでるとか・・・・プログラム技術板・・コミュニケーション終わってね?
430デフォルトの名無しさん
2018/08/05(日) 06:11:20.74ID:cdvogGHQ >>428
よくわからないんだけど、下2桁を60で割って3桁目より上は1の位にシフトしているわけだよね。
とするとあり得るのは時間の時と分について 時 * 100 + 分 とやった結果が数値として入っていて、
それの時間単位への変換ではないか?
例えば元の値が 315 なら3時間15分という意味で、それを時間単位に直すと 3.25 時間ってこと。
よくわからないんだけど、下2桁を60で割って3桁目より上は1の位にシフトしているわけだよね。
とするとあり得るのは時間の時と分について 時 * 100 + 分 とやった結果が数値として入っていて、
それの時間単位への変換ではないか?
例えば元の値が 315 なら3時間15分という意味で、それを時間単位に直すと 3.25 時間ってこと。
431デフォルトの名無しさん
2018/08/05(日) 06:13:27.55ID:cdvogGHQ 時と分とは限らないか。分と秒かも知れない。まあしかし下2桁は60進法で考えなければいけないということに変わりはない。
432デフォルトの名無しさん
2018/08/05(日) 07:50:18.49ID:cdvogGHQ >>428
ところで元のプログラムに「16進バイナリデータを・・・」というコメントが入っているのだろうが、呼び出す側は実際には何を渡している?
仮に元がバイナリだったとしても unpack('N', ...) のようなことをしていない? だとするとそこでバイナリから Perl の
変数への変換自体は終わっている。
つまり、コメントが紛らわしい表現になっているだけ。
ところで元のプログラムに「16進バイナリデータを・・・」というコメントが入っているのだろうが、呼び出す側は実際には何を渡している?
仮に元がバイナリだったとしても unpack('N', ...) のようなことをしていない? だとするとそこでバイナリから Perl の
変数への変換自体は終わっている。
つまり、コメントが紛らわしい表現になっているだけ。
2018/08/05(日) 12:21:43.54ID:gWGunr7x
>430-432 スミマセンです。 orz
もっと詳しく書こうとするとマンゴースレでもブロックされました。
ぶっちゃけ、この中の
ttp://motor.geocities.jp/resermail/dc10tools.zip
「dc10mov2csv.pl」内です。
gps_data{'latitude'}の部分からです
gps_data{'bearing'}の式は
変換が単精度浮動小数点数(float)のIEEE754 単精度float変換で合ってますか?
これをベースに別メーカー機種の同様な構造を持つデータでの他言語の変換プログラムを考えているので。
もっと詳しく書こうとするとマンゴースレでもブロックされました。
ぶっちゃけ、この中の
ttp://motor.geocities.jp/resermail/dc10tools.zip
「dc10mov2csv.pl」内です。
gps_data{'latitude'}の部分からです
gps_data{'bearing'}の式は
変換が単精度浮動小数点数(float)のIEEE754 単精度float変換で合ってますか?
これをベースに別メーカー機種の同様な構造を持つデータでの他言語の変換プログラムを考えているので。
434デフォルトの名無しさん
2018/08/05(日) 17:23:40.10ID:cdvogGHQ >>433
pack, unpack の f は機種依存なので IEEE 754 単制度になるかどうかはプログラムからだけではわからない。
http://perldoc.jp/func/pack
まあでも今時の普通のPC用Perlならなってそうな気がするけどね。
latitude って緯度か。GPSデータのバイナリをPerlの変数に入れているということだな。
だから下2桁を60進法で考える必要があると。
やはりそのプログラムのコメントは紛らわしいってだけだよ(サブルーチン名も紛らわしいが)。
bin_convert 呼ぶときには既にバイナリから float に unpack されてるから。
で、bin_convert 内でやっているのは先に書いた通り下2桁を60進法で小数点以下の値にしてるってことね。
pack, unpack の f は機種依存なので IEEE 754 単制度になるかどうかはプログラムからだけではわからない。
http://perldoc.jp/func/pack
まあでも今時の普通のPC用Perlならなってそうな気がするけどね。
latitude って緯度か。GPSデータのバイナリをPerlの変数に入れているということだな。
だから下2桁を60進法で考える必要があると。
やはりそのプログラムのコメントは紛らわしいってだけだよ(サブルーチン名も紛らわしいが)。
bin_convert 呼ぶときには既にバイナリから float に unpack されてるから。
で、bin_convert 内でやっているのは先に書いた通り下2桁を60進法で小数点以下の値にしてるってことね。
435427です
2018/08/05(日) 21:57:54.47ID:gWGunr7x436デフォルトの名無しさん
2018/10/05(金) 20:29:10.24ID:ZpFL29Ml 「サンプル」のCSVを文末の「結果」に変換するプログラムをPerlで作りたいです。
● サンプルのCSVの構造:
1コラム目:数字8桁の昇順、2コラム目:数字1桁、3コラム目:文字列
● 作りたいプログラム:
1コラム目、3コラム目は保持する。複数レコードで1コラム目に重複があれば、
それらの複数レコードの2コラム目の1桁数字を連番にする。
1コラム目に重複がない場合は、当該レコードの2コラム目を1にする。
● 「サンプル」
06030002,6,文字列A
06030004,3,文字列B
06030004,4,文字列C
06030004,5,文字列D
06030005,3,文字列E
06030005,4,文字列F
06030006,3,文字列G
06030006,4,文字列H
06030006,7,文字列I
06030007,3,文字列J
06030008,3,文字列K
● 「結果」
06030002,1,文字列A
06030004,1,文字列B
06030004,2,文字列C
06030004,3,文字列D
06030005,1,文字列E
06030005,2,文字列F
06030006,1,文字列G
06030006,2,文字列H
06030006,3,文字列I
06030007,1,文字列J
06030008,1,文字列K
● サンプルのCSVの構造:
1コラム目:数字8桁の昇順、2コラム目:数字1桁、3コラム目:文字列
● 作りたいプログラム:
1コラム目、3コラム目は保持する。複数レコードで1コラム目に重複があれば、
それらの複数レコードの2コラム目の1桁数字を連番にする。
1コラム目に重複がない場合は、当該レコードの2コラム目を1にする。
● 「サンプル」
06030002,6,文字列A
06030004,3,文字列B
06030004,4,文字列C
06030004,5,文字列D
06030005,3,文字列E
06030005,4,文字列F
06030006,3,文字列G
06030006,4,文字列H
06030006,7,文字列I
06030007,3,文字列J
06030008,3,文字列K
● 「結果」
06030002,1,文字列A
06030004,1,文字列B
06030004,2,文字列C
06030004,3,文字列D
06030005,1,文字列E
06030005,2,文字列F
06030006,1,文字列G
06030006,2,文字列H
06030006,3,文字列I
06030007,1,文字列J
06030008,1,文字列K
437デフォルトの名無しさん
2018/10/05(金) 21:39:08.56ID:liWk4NPs まずは自分で書いてみたコードを晒すところからだな。
438デフォルトの名無しさん
2018/10/05(金) 22:57:27.02ID:kjx9soPU 一行プログラムが思い浮かんだ。
最初の列をハッシュのキーにして3列目をpush。
全部読んだらキーをソートして読んだ内容に番号降りつつ出力。
しかし俺は今電車の中からスマホで書いてるのでここに書く気が起きない。
最初の列をハッシュのキーにして3列目をpush。
全部読んだらキーをソートして読んだ内容に番号降りつつ出力。
しかし俺は今電車の中からスマホで書いてるのでここに書く気が起きない。
439デフォルトの名無しさん
2018/10/06(土) 00:22:39.61ID:mGKg2bAW Ruby で作った
require 'csv'
count = Hash.new( 0 ) # 初期値は、0
# コロン区切りのCSV 入力ファイルを、1行ずつ処理する
CSV.foreach( "input.csv" ) do |row|
count[ row[ 0 ] ] += 1
row[ 1 ] = count[ row[ 0 ] ]
puts row.join( "," )
end
require 'csv'
count = Hash.new( 0 ) # 初期値は、0
# コロン区切りのCSV 入力ファイルを、1行ずつ処理する
CSV.foreach( "input.csv" ) do |row|
count[ row[ 0 ] ] += 1
row[ 1 ] = count[ row[ 0 ] ]
puts row.join( "," )
end
440デフォルトの名無しさん
2018/10/06(土) 02:20:13.04ID:m3dYH3N7441デフォルトの名無しさん
2018/10/06(土) 03:33:56.69ID:gPBhgV7B my @y = "";
while(<>) {
my @x = split ",";
# $x[1] = $x[0] eq $y[0] && ++$y[1] || 1;
$x[1] = $x[0] ne $y[0] || ++$y[1];
print join ",", (@y = @x);
}
ウチでやるならこうかしら
while(<>) {
my @x = split ",";
# $x[1] = $x[0] eq $y[0] && ++$y[1] || 1;
$x[1] = $x[0] ne $y[0] || ++$y[1];
print join ",", (@y = @x);
}
ウチでやるならこうかしら
442438
2018/10/06(土) 06:07:28.44ID:J8Y2BFN6 おはよう。
元のテキストが s.txt に入っているとして、こうする。
perl -ne 'chomp;@d=split/,/;push(@{$h{$d[0]}},$d[2]);END{for(sort keys%h){for($i=0;$i<@{$h{$_}};$i++){print join(",",$_,$i+1,$h{$_}[$i])."\n"}}}' s.txt
なげーなw
元のテキストが s.txt に入っているとして、こうする。
perl -ne 'chomp;@d=split/,/;push(@{$h{$d[0]}},$d[2]);END{for(sort keys%h){for($i=0;$i<@{$h{$_}};$i++){print join(",",$_,$i+1,$h{$_}[$i])."\n"}}}' s.txt
なげーなw
443438
2018/10/06(土) 06:21:52.15ID:J8Y2BFN6 あ、そうか。貯め込む必要はなくてハッシュ作ってそのまんま出せば良いんだよな。
じゃあawkの方が楽ではないか?
awk -F, 'BEGIN{OFS=","}{n[$1]++;print $1,n[$1],$3}' s.txt
じゃあawkの方が楽ではないか?
awk -F, 'BEGIN{OFS=","}{n[$1]++;print $1,n[$1],$3}' s.txt
444デフォルトの名無しさん
2018/10/06(土) 17:28:12.58ID:MMGbFZjG 436です。皆様ありがとうございました。
自分では1行ずつ処理することまでしかできず、複数レコードの
1コラム目の比較をすることができませんでした。
おかげさまで体育の日に子供の運動会に行けます!
ありがとうございました!
自分では1行ずつ処理することまでしかできず、複数レコードの
1コラム目の比較をすることができませんでした。
おかげさまで体育の日に子供の運動会に行けます!
ありがとうございました!
445デフォルトの名無しさん
2018/11/11(日) 14:10:45.60ID:eqm/EHYd 上の方のレスにも関連したものがありますが、
ファイルから読み込んだ文字列データにて
パターンマッチがヒットしません。
同一文字列を直接コード内に定義すると、ヒットします。
出来ればファイルに切り出したいので、
ご教示いただけますでしょうか。
ファイルから読み込んだ文字列データにて
パターンマッチがヒットしません。
同一文字列を直接コード内に定義すると、ヒットします。
出来ればファイルに切り出したいので、
ご教示いただけますでしょうか。
446デフォルトの名無しさん
2018/11/11(日) 14:11:11.73ID:eqm/EHYd [環境]
Activeperl win8.1 or 2016 server
perl -v
This is perl 5, version 24, subversion 3 (v5.24.3) built for MSWin32-x64-multi-thread
[コード utf-8で作成]
#res[1]にはcp932のコードの「テスト」を含む文字列が格納されている。
$res[1] = Encode::decode('cp932', $res[1]);
#patern.txtはutf-8で「テスト」の文字列が格納されている。
open (FILE, "<:utf8", "patern.txt") or (die "$!");
my $line = <FILE>;
close(FILE);
#$line = 'テスト';←#を外して直接コードに書くとヒットする。
print encode('cp932', $line);(正常に取得できている。)
if ($res[1] =~ /$line/){
print "Hit!";
} else{
print "not Hit";
}
---出力---
>テスト
>not Hit
Activeperl win8.1 or 2016 server
perl -v
This is perl 5, version 24, subversion 3 (v5.24.3) built for MSWin32-x64-multi-thread
[コード utf-8で作成]
#res[1]にはcp932のコードの「テスト」を含む文字列が格納されている。
$res[1] = Encode::decode('cp932', $res[1]);
#patern.txtはutf-8で「テスト」の文字列が格納されている。
open (FILE, "<:utf8", "patern.txt") or (die "$!");
my $line = <FILE>;
close(FILE);
#$line = 'テスト';←#を外して直接コードに書くとヒットする。
print encode('cp932', $line);(正常に取得できている。)
if ($res[1] =~ /$line/){
print "Hit!";
} else{
print "not Hit";
}
---出力---
>テスト
>not Hit
447デフォルトの名無しさん
2018/11/11(日) 16:14:59.60ID:56YuZzmp >>446
改行文字の有無?
改行文字の有無?
448デフォルトの名無しさん
2018/11/11(日) 18:17:18.70ID:t5AG7sJB たぶんそれだな。$line の中身が "テスト\r\n" または "テスト\n" になってそう。
449デフォルトの名無しさん
2018/11/12(月) 00:16:54.10ID:MtlIUxHY chomp($line); するべき
450デフォルトの名無しさん
2018/11/12(月) 07:45:13.53ID:8fj5l105 遅くなりすみません。
テストファイルには改行を入れていなかったのですが、
chompが必要なのですね。
ファイルからレコードを取得するにはchompが必要と勉強になりました。
ありがとうございました。
テストファイルには改行を入れていなかったのですが、
chompが必要なのですね。
ファイルからレコードを取得するにはchompが必要と勉強になりました。
ありがとうございました。
451デフォルトの名無しさん
2018/11/12(月) 09:22:08.61ID:I5PkaEyl >>450
いや、改行は入っていると思うぞ。でなければあのプログラムでは一致する。
いや、改行は入っていると思うぞ。でなければあのプログラムでは一致する。
452デフォルトの名無しさん
2018/11/13(火) 17:15:58.77ID:WOZg75XW utf-8がボムがついている可能性もあるね
453デフォルトの名無しさん
2018/11/13(火) 17:46:33.84ID:/6RlnNZj ところでUTF-8にBOMってなんか意味あるの?
ビッグエンディアンで上のビットから詰め込んで並べている1パターンしかないよね?
ビッグエンディアンで上のビットから詰め込んで並べている1パターンしかないよね?
454デフォルトの名無しさん
2018/11/13(火) 18:09:12.36ID:3HdfrOce455デフォルトの名無しさん
2018/11/13(火) 19:44:37.81ID:/6RlnNZj あー。magic用か。
456デフォルトの名無しさん
2018/11/14(水) 00:34:48.87ID:efwoHdbt457デフォルトの名無しさん
2018/11/14(水) 09:45:09.68ID:bDqFuzUS >>456
手順としてはまず比較に都合のいいように比較する側とされる側の文字列を正規化する。
例えば半角は全て全角にし、濁点や半濁点はそれを含んだ文字にし、英小文字は大文字にする。
それから比較を行う。
ただし使われている文字がASCIIの文字だけならば // のオプションで i が使えるので正規化不要。
手順としてはまず比較に都合のいいように比較する側とされる側の文字列を正規化する。
例えば半角は全て全角にし、濁点や半濁点はそれを含んだ文字にし、英小文字は大文字にする。
それから比較を行う。
ただし使われている文字がASCIIの文字だけならば // のオプションで i が使えるので正規化不要。
458デフォルトの名無しさん
2018/11/14(水) 12:24:46.73ID:XfG22Q3S 教えて下さい。
my @str4=['a','b','c','d','e'];
my $ref4=\@str4;
print $str4[0][1],"\n"; # b
print @{ $str4[0] },"\n"; # abcde
ref4を使って同様に b と abcde を表示するには、どうしたらいいですか?
my @str4=['a','b','c','d','e'];
my $ref4=\@str4;
print $str4[0][1],"\n"; # b
print @{ $str4[0] },"\n"; # abcde
ref4を使って同様に b と abcde を表示するには、どうしたらいいですか?
459デフォルトの名無しさん
2018/11/14(水) 12:38:11.11ID:XfG22Q3S うっかり自己解決しました。数時間悩んだのに。
print @{ ${ $ref4 }[0] };
print @{ ${ $ref4 }[0] }[1];
print @{ ${ $ref4 }[0] };
print @{ ${ $ref4 }[0] }[1];
460デフォルトの名無しさん
2018/11/14(水) 19:36:24.69ID:dXHPcciK >>457
オプションで可能であればと思ったのですが、マッチング文字列と対象を同じ文字種にしないといけないんですね。
ActivePerlでUnicode::Japanese
でUTF8から変換して書いてみたのですが、cp932にencodeすると、化けてしまい、使用できませんでした。
ActivePerlで使用可能なモジュールあればコードではなくてかまいませんので、何かあれば紹介してもらえますでしょうか。
オプションで可能であればと思ったのですが、マッチング文字列と対象を同じ文字種にしないといけないんですね。
ActivePerlでUnicode::Japanese
でUTF8から変換して書いてみたのですが、cp932にencodeすると、化けてしまい、使用できませんでした。
ActivePerlで使用可能なモジュールあればコードではなくてかまいませんので、何かあれば紹介してもらえますでしょうか。
461デフォルトの名無しさん
2018/11/14(水) 20:41:47.52ID:bryEJhFF UNICODEにはcomposed、decomposedというややこしいものもあるんだよね。
https://pointoht.ti-da.net/e8205606.html
Unicode::Normalizeってのがあるけど、日本語を特別扱いしてくれたりはしなさそうな予感。
https://pointoht.ti-da.net/e8205606.html
Unicode::Normalizeってのがあるけど、日本語を特別扱いしてくれたりはしなさそうな予感。
462デフォルトの名無しさん
2018/11/14(水) 22:57:23.73ID:otO/yyOk >>453-455
Linux では、BOM なしUTF-8 を使う、アプリ開発者が多く、
BOMありにするとバグるアプリがあるから、BOMなしを使っているけど、
そうすると、Windows では、sjis と区別がつかなくなり、
Explorer での文字列検索ができなくなる
だから、Windows10 で、WSL, Ubuntu を導入して、grep を使っている
Linux では、BOM なしUTF-8 を使う、アプリ開発者が多く、
BOMありにするとバグるアプリがあるから、BOMなしを使っているけど、
そうすると、Windows では、sjis と区別がつかなくなり、
Explorer での文字列検索ができなくなる
だから、Windows10 で、WSL, Ubuntu を導入して、grep を使っている
463462
2018/11/14(水) 23:51:54.30ID:otO/yyOk 結合文字列をUnicode正規化で合成する方法の危険性
https://qiita.com/monokano/items/d4c37d9bc9833eaeda6e
濁点・半濁点を別の1文字として扱う、結合文字列はMac だけだから、Mac を使わないなら関係ない
Unicode正規化は、日中韓で、別の漢字に変換されるものがあるから使えない
Ruby では、sjis・UTF-8 の変換は、ファイル読み書き時に指定できる。
CRLF・LF の改行コードの違いは、意識したことがない。
chomp とか、どちらの改行コードでも、正常に動く
https://qiita.com/monokano/items/d4c37d9bc9833eaeda6e
濁点・半濁点を別の1文字として扱う、結合文字列はMac だけだから、Mac を使わないなら関係ない
Unicode正規化は、日中韓で、別の漢字に変換されるものがあるから使えない
Ruby では、sjis・UTF-8 の変換は、ファイル読み書き時に指定できる。
CRLF・LF の改行コードの違いは、意識したことがない。
chomp とか、どちらの改行コードでも、正常に動く
464462
2018/11/15(木) 00:11:38.19ID:g74yzjtM 【 nkf 】コマンド――文字コードと改行コードを変換する
http://www.atmarkit.co.jp/ait/articles/1609/29/news016.html
これで全角・半角の変換もできる
Perl にも、モジュールもあるのでは?
http://www.atmarkit.co.jp/ait/articles/1609/29/news016.html
これで全角・半角の変換もできる
Perl にも、モジュールもあるのでは?
465デフォルトの名無しさん
2018/11/21(水) 22:55:48.65ID:M0TZNmLm466デフォルトの名無しさん
2018/11/21(水) 23:00:44.11ID:M0TZNmLm ハッシュを要素に持つハッシュへのアクセスについて
ご教示いただけますでしょうか。
下記のコードで、読込は正常に完了しますが、出力が不可能です。
$$を使用したり、試しましたがギブアップです。
#hash.txtの中身(タブ区切り)
#1 10 テスト1
#2 5 テスト2
use Encode;
use utf8;
my %table;
my %rec;
open (FILE, "<:utf8", "hash.txt") or (die "$!");
while(my $line = <FILE>){
chomp($line);
@d = split(/\t/, $line);
%rec = ('id' => $d[0], 'count' => $d[1], 'name' => $d[2]);
$table{$d[0]} = \%rec;
print encode('cp932', $table{$d[0]}{'id'})."\t". encode('cp932', $table{$d[0]}{'count'})."\t".encode('cp932', $table{$d[0]}{'name'})."\n";
}
close(FILE);
print Encode::encode('cp932', "読込完了\n");
foreach my $row (@$wrote_num){
#出力不可能
print encode('cp932', $row{'id'})."\t". encode('cp932', $row{'count'})."\t".encode('cp932', $row{'name'})."\n";
}
print Encode::encode('cp932', "$出力完了\n");
ご教示いただけますでしょうか。
下記のコードで、読込は正常に完了しますが、出力が不可能です。
$$を使用したり、試しましたがギブアップです。
#hash.txtの中身(タブ区切り)
#1 10 テスト1
#2 5 テスト2
use Encode;
use utf8;
my %table;
my %rec;
open (FILE, "<:utf8", "hash.txt") or (die "$!");
while(my $line = <FILE>){
chomp($line);
@d = split(/\t/, $line);
%rec = ('id' => $d[0], 'count' => $d[1], 'name' => $d[2]);
$table{$d[0]} = \%rec;
print encode('cp932', $table{$d[0]}{'id'})."\t". encode('cp932', $table{$d[0]}{'count'})."\t".encode('cp932', $table{$d[0]}{'name'})."\n";
}
close(FILE);
print Encode::encode('cp932', "読込完了\n");
foreach my $row (@$wrote_num){
#出力不可能
print encode('cp932', $row{'id'})."\t". encode('cp932', $row{'count'})."\t".encode('cp932', $row{'name'})."\n";
}
print Encode::encode('cp932', "$出力完了\n");
467デフォルトの名無しさん
2018/11/22(木) 00:04:25.39ID:V9xGGA7p wrote_numが何か分からんけど
my %rec; はwhile内にしたらどうですか
あと、$rowはハッシュのリファレンスだろうから$row->{'id'}では
my %rec; はwhile内にしたらどうですか
あと、$rowはハッシュのリファレンスだろうから$row->{'id'}では
468デフォルトの名無しさん
2018/11/22(木) 10:12:03.32ID:iCX1SQ90 >>467
すみません、レス用に書き換えた元がwote_numでした
下記の様に変えましたが、アクセスできません。
意外と難しいですね。
use Encode;
use utf8;
my %table;
open (FILE, "<:utf8", "hash.txt") or (die "$!");
while(my $line = <FILE>){
chomp($line);
@d = split(/\t/, $line);
my %rec = ('id' => $d[0], 'count' => $d[1], 'name' => $d[2]);
$table{$d[0]} = \%rec;
print encode('cp932', $table{$d[0]}{'id'})."\t". encode('cp932', $table{$d[0]}{'count'})."\t".encode('cp932', $table{$d[0]}{'name'})."\n";
}
close(FILE);
print Encode::encode('cp932', "読込完了\n");
foreach my $row (@$table){
print encode('cp932', $row->{'id'})."\t". encode('cp932', $row->{'count'})."\t".encode('cp932', $row->{'name'})."\n";
}
print Encode::encode('cp932', "$出力完了\n");
実行結果:まだアクセスできません
>hash_test.pl
1 10 テスト1
2 5 テスト2
読込完了
出力完了
すみません、レス用に書き換えた元がwote_numでした
下記の様に変えましたが、アクセスできません。
意外と難しいですね。
use Encode;
use utf8;
my %table;
open (FILE, "<:utf8", "hash.txt") or (die "$!");
while(my $line = <FILE>){
chomp($line);
@d = split(/\t/, $line);
my %rec = ('id' => $d[0], 'count' => $d[1], 'name' => $d[2]);
$table{$d[0]} = \%rec;
print encode('cp932', $table{$d[0]}{'id'})."\t". encode('cp932', $table{$d[0]}{'count'})."\t".encode('cp932', $table{$d[0]}{'name'})."\n";
}
close(FILE);
print Encode::encode('cp932', "読込完了\n");
foreach my $row (@$table){
print encode('cp932', $row->{'id'})."\t". encode('cp932', $row->{'count'})."\t".encode('cp932', $row->{'name'})."\n";
}
print Encode::encode('cp932', "$出力完了\n");
実行結果:まだアクセスできません
>hash_test.pl
1 10 テスト1
2 5 テスト2
読込完了
出力完了
469デフォルトの名無しさん
2018/11/22(木) 10:30:19.76ID:Enb78Zev これでいけると思いましたが、玉砕でしたw
foreach my $row (@$table){
while (my ($id, $count, $name) = each(%row)){
print encode('cp932', "$id\t$count\t$name\n");
}
foreach my $row (@$table){
while (my ($id, $count, $name) = each(%row)){
print encode('cp932', "$id\t$count\t$name\n");
}
470デフォルトの名無しさん
2018/11/22(木) 10:54:51.08ID:iCX1SQ90 これでいけました!
foreach my $row (keys %table){
print encode('cp932', "$table{$row}{'id'}\t$table{$row}{'count'}\t$table{$row}{'name'}\n");
}
>hash_test.pl
1 10 テスト1
2 5 テスト2
読込完了
1 10 テスト1
2 5 テスト2
出力完了
ただ、key を外して foreach my $row (%table)とすると下記の通り改行が入ります
1 10 テスト1
2 5 テスト2
出力完了
foreach my $row (keys %table){
print encode('cp932', "$table{$row}{'id'}\t$table{$row}{'count'}\t$table{$row}{'name'}\n");
}
>hash_test.pl
1 10 テスト1
2 5 テスト2
読込完了
1 10 テスト1
2 5 テスト2
出力完了
ただ、key を外して foreach my $row (%table)とすると下記の通り改行が入ります
1 10 テスト1
2 5 テスト2
出力完了
471デフォルトの名無しさん
2018/11/22(木) 11:07:56.03ID:Enb78Zev これで全てのハッシュ要素を出力できますが、
カラム順が不確定になってしまいますね。
ハッシュなので仕方ないことですかね。
foreach $row (sort keys %table) {
foreach $col (sort keys %{$table{$row}}) {
print encode('cp932', "$table{$row}{$col}\t");
}
print "\n";
}
>hash_test.pl
1 10 テスト1
2 5 テスト2
読込完了
5 2 テスト2
10 1 テスト1
出力完了
カラム順が不確定になってしまいますね。
ハッシュなので仕方ないことですかね。
foreach $row (sort keys %table) {
foreach $col (sort keys %{$table{$row}}) {
print encode('cp932', "$table{$row}{$col}\t");
}
print "\n";
}
>hash_test.pl
1 10 テスト1
2 5 テスト2
読込完了
5 2 テスト2
10 1 テスト1
出力完了
472デフォルトの名無しさん
2018/11/22(木) 12:53:27.47ID:+z2Jd1go >>471
キーだけ別の配列に取っといてそれ使えば?
キーだけ別の配列に取っといてそれ使えば?
473デフォルトの名無しさん
2018/11/25(日) 19:58:05.78ID:Ngr2zrFy >>472
できれば要素をカラム名でアクセスしたいのでハッシュの方がいいのですが、カラム順固定出力は配列しかないということですね。
できれば要素をカラム名でアクセスしたいのでハッシュの方がいいのですが、カラム順固定出力は配列しかないということですね。
474デフォルトの名無しさん
2018/11/25(日) 21:54:59.45ID:CqrOufwt 両方使えば良いのでは たまにやるよ
475デフォルトの名無しさん
2018/11/26(月) 04:07:41.06ID:LFi/GsCA >>471
foreach $col (sort keys %{$table{$row}}) {
を
foreach $col (qw/id count name/) {
とかでは? keyの名前も順番も分かってるんだし。
foreach $col (sort keys %{$table{$row}}) {
を
foreach $col (qw/id count name/) {
とかでは? keyの名前も順番も分かってるんだし。
476デフォルトの名無しさん
2019/06/24(月) 04:43:33.88ID:4+LiJo6+ 自分が昔質問したことにたいして今なら回答できる
<> は <STDIN> の単なる略ではなく
@ARGV が捕れない副作用があった
そこに詰まっていた
#!/usr/bin/env perl
use 5.010;
if (-p STDIN) {
print "May be pipe is used. I've got STDIN as below\n";
# my @lines = <STDIN>; # when <> used, perl think no @ARGV
map {state $i; ++$i;print "$i $_" } <STDIN>;
}
else {
print "This may be just single running.\n";
}
map {state $i; ++$i; print "$i argment found ==> $_\n"} @ARGV;
<> は <STDIN> の単なる略ではなく
@ARGV が捕れない副作用があった
そこに詰まっていた
#!/usr/bin/env perl
use 5.010;
if (-p STDIN) {
print "May be pipe is used. I've got STDIN as below\n";
# my @lines = <STDIN>; # when <> used, perl think no @ARGV
map {state $i; ++$i;print "$i $_" } <STDIN>;
}
else {
print "This may be just single running.\n";
}
map {state $i; ++$i; print "$i argment found ==> $_\n"} @ARGV;
477デフォルトの名無しさん
2019/08/29(木) 20:58:11.72ID:72vdfcsY タグを除去したいのですが、<>も文に入っているため
<.*?>ではなく<("[^"]*"|'[^']*'|[^'">])*>を使いたいのですが
perl -pe '<("[^"]*"|'[^']*'|[^'">])*>'
にする場合どれどれをエスケープすればよいでしょうか?
’だけだと動きませんでした。
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'
<.*?>ではなく<("[^"]*"|'[^']*'|[^'">])*>を使いたいのですが
perl -pe '<("[^"]*"|'[^']*'|[^'">])*>'
にする場合どれどれをエスケープすればよいでしょうか?
’だけだと動きませんでした。
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'
478デフォルトの名無しさん
2019/08/30(金) 12:09:22.02ID:VkI78Ia/ 除去?だったらs/パターン//gみたいにやらないと何も変わらないのでは?
てか、それエラーにならないの?
てか、それエラーにならないの?
479デフォルトの名無しさん
2019/08/30(金) 13:51:46.18ID:XCxRWcZV 5chの書き込みのほう、つけ忘れてました
perl -pe 's/<("[^"]*"|'[^']*'|[^'">])*>//g'
です
perl -pe 's/<.*?>//g'は動くんですけど
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'だと動かないんですよね
perl -pe 's/<("[^"]*"|'[^']*'|[^'">])*>//g'
です
perl -pe 's/<.*?>//g'は動くんですけど
perl -pe '<("[^"]*"|\'[^\']*\'|[^'">])*>'だと動かないんですよね
480デフォルトの名無しさん
2019/08/30(金) 13:52:36.95ID:XCxRWcZV またやっちゃった
perl -pe 's/<("[^"]*"|\'[^\']*\'|[^'">])*>//g'
perl -pe 's/<("[^"]*"|\'[^\']*\'|[^'">])*>//g'
481デフォルトの名無しさん
2019/08/30(金) 17:21:58.25ID:8Dc5lx9D こうか?
perl -pe 's/<("[^"]*"|'"'"'[^'"'"']*'"'"'|[^'"'"'">])*>//g'
perlというよりシェルのシングルクォートの問題
perl -pe 's/<("[^"]*"|'"'"'[^'"'"']*'"'"'|[^'"'"'">])*>//g'
perlというよりシェルのシングルクォートの問題
482デフォルトの名無しさん
2019/08/30(金) 17:42:16.91ID:fIMZQtfT そこまでするくらいなら HTML::Parser を使う方がいいと思うよ。
483デフォルトの名無しさん
2019/08/30(金) 17:56:41.24ID:XCxRWcZV >481
できました!、ありがとうございます。
'を'""'で括るのですね
なんで\でエスケープにならないんでしょうね
できました!、ありがとうございます。
'を'""'で括るのですね
なんで\でエスケープにならないんでしょうね
484デフォルトの名無しさん
2019/08/30(金) 18:04:26.61ID:XCxRWcZV パーサーも一度使ってみたんですが
<p>hoge</p><p>hoge</p>
pタグが一行に2つあると誤作動したりするんですよね
<p>hoge</p><p>hoge</p>
pタグが一行に2つあると誤作動したりするんですよね
485デフォルトの名無しさん
2019/08/30(金) 23:22:18.80ID:fIMZQtfT その誤作動がパーサーのせいかどうかは判らないが、少なくとも
HTML::Parser でそんなことは起こらないから安心してほしい。
たとえばテキスト部分だけを出力したいならこんな感じでできる。
my $parser = HTML::Parser->new(
text_h => [sub { print( $_[0]) },'text'],
);
$parser->parse_file( \*STDIN);
HTML::Parser でそんなことは起こらないから安心してほしい。
たとえばテキスト部分だけを出力したいならこんな感じでできる。
my $parser = HTML::Parser->new(
text_h => [sub { print( $_[0]) },'text'],
);
$parser->parse_file( \*STDIN);
486デフォルトの名無しさん
2019/08/31(土) 00:18:32.04ID:mx6W2BK8 >485
参考になります。
パーサーもいろいろ種類あるみたいですね。
自分の使ってたのはhtml-xml-utilsというやつでした。
参考になります。
パーサーもいろいろ種類あるみたいですね。
自分の使ってたのはhtml-xml-utilsというやつでした。
487デフォルトの名無しさん
2021/04/21(水) 00:35:38.31ID:J2c8I4ei @aに0を100ケ追加するには、pushをforで100回回す以外の方法ありますか
488デフォルトの名無しさん
2021/04/21(水) 03:07:59.27ID:aE0oGLsa push(@a, (0) x 100);
489デフォルトの名無しさん
2021/04/27(火) 18:16:47.03ID:OX0aAdkQ490デフォルトの名無しさん
2021/11/19(金) 22:27:21.73ID:v67hT9Zk 二つ以上の空白文字列を
一つの空白に変えたいのですが
うまくいきません。
if($line=~/\s\s+/){
$line=~s/\s\s+/\s/g
print("$line\n")
}
一つの空白に変えたいのですが
うまくいきません。
if($line=~/\s\s+/){
$line=~s/\s\s+/\s/g
print("$line\n")
}
491デフォルトの名無しさん
2021/11/20(土) 02:07:02.21ID:h6kzSIM/ $line=~s/¥s¥s+/ /g
では?
では?
492デフォルトの名無しさん
2021/11/20(土) 20:14:01.04ID:xbsxU5SW s/\s\s+/ /g;
でうまくいったよ。
そうか、\sって正規表現だから、置換文字列に使うと「perl にそんな定義ないで!」ってなるのか。
これは俺も気を付けよう。
でうまくいったよ。
そうか、\sって正規表現だから、置換文字列に使うと「perl にそんな定義ないで!」ってなるのか。
これは俺も気を付けよう。
493デフォルトの名無しさん
2021/11/20(土) 20:36:42.09ID:xbsxU5SW 置換といえばこのまえ、JSONで取得したUnicodeを表示したくて、
\u3042 → \N{U+3042}
に置換しようとしたけど、できなかった。
\N{U+ }←ここにはリテラルしか書けないのかな。
\u3042 → \N{U+3042}
に置換しようとしたけど、できなかった。
\N{U+ }←ここにはリテラルしか書けないのかな。
494デフォルトの名無しさん
2021/12/14(火) 19:15:14.22ID:LP8Fmqr9 if文で真偽値を判定するのってどうやるの?
hoge() or die("Error\n");
ってなってた(hoge()の戻り値が魏ならエラー)のを標準出力したくて
my $a = hoge();
if( ! $a ){ print("Error\n"); exit $!; }
みたいにしたんだけど、if文の書き方ってこんなんで良いの?
hoge() or die("Error\n");
ってなってた(hoge()の戻り値が魏ならエラー)のを標準出力したくて
my $a = hoge();
if( ! $a ){ print("Error\n"); exit $!; }
みたいにしたんだけど、if文の書き方ってこんなんで良いの?
495デフォルトの名無しさん
2021/12/25(土) 19:09:39.02ID:pJ3Bii8w496デフォルトの名無しさん
2021/12/25(土) 20:31:09.16ID:62MjaTIU497デフォルトの名無しさん
2021/12/30(木) 05:41:55.25ID:grPlj9k3 良くないんだってば。
Perlをそういう流儀でやってるといつか痛い目にあうよ。
Perlをそういう流儀でやってるといつか痛い目にあうよ。
498494ではない
2021/12/30(木) 08:07:22.12ID:j5bdR14I499デフォルトの名無しさん
2021/12/30(木) 17:49:56.83ID:QArx8wCq そういう言語なの
0 but true
なんていう値もあるし
0 but true
なんていう値もあるし
500デフォルトの名無しさん
2022/01/10(月) 19:33:13.97ID:2hS04FMw do what perl mean
501デフォルトの名無しさん
2022/01/11(火) 00:17:50.61ID:Xf79Fgui bool値ほしい
502デフォルトの名無しさん
2022/03/27(日) 23:43:39.11ID:TRkpHzjA >>497
じゃあどうすればいいの?
じゃあどうすればいいの?
503デフォルトの名無しさん
2022/04/28(木) 20:33:01.74ID:KupWcmJ5 元の
hoge() or die("Error\n");
が問題なく動いてるなら
hoge() or print("Error\n"), die $!;
hoge() or die("Error\n");
が問題なく動いてるなら
hoge() or print("Error\n"), die $!;
504デフォルトの名無しさん
2022/06/11(土) 13:31:52.57ID:XcUjU1KU505デフォルトの名無しさん
2023/12/15(金) 06:59:42.19ID:aRdlBUAD $_ ← これ、なんて読む?
perlが発祥ってわけでもないそうだが(bashとかにもあるんだってね)、ガチのドザなので
俺は内心ドルバーって呼んでる
perlが発祥ってわけでもないそうだが(bashとかにもあるんだってね)、ガチのドザなので
俺は内心ドルバーって呼んでる
506デフォルトの名無しさん
2023/12/19(火) 00:32:16.33ID:LgO8Ui43 ドル・アンダーバーじゃないかな。
設定によってはチルダの代わりにトップバーってのがあったから、それと区別するのにアンダーって言ってた気がする。
設定によってはチルダの代わりにトップバーってのがあったから、それと区別するのにアンダーって言ってた気がする。
507505
2023/12/21(木) 12:15:47.33ID:nsa/DjJa おつあり
そういやそんなの(トップバー)あったねえ なるほど
そういやそんなの(トップバー)あったねえ なるほど
508デフォルトの名無しさん
2024/02/09(金) 17:07:48.28ID:LEmbefGZ509デフォルトの名無しさん
2024/03/03(日) 23:39:10.39ID:1cRqRnnX なつかしのcgiゲームを設置したくてperlを触ってるのですが、今の時代でもcgiゲームはサーバーへの負荷は大きいのでしょうか?(昔はよくゲームの設置が禁止されてましたが)
perlと関係なかったらすみません…
perlと関係なかったらすみません…
510デフォルトの名無しさん
2024/03/16(土) 03:41:28.53ID:I49Gallj StrawberryPerlで
$str='あ';
if ($str =~ /^[あいう]$/) {print("match\n");}
を実行してみるとマッチしてくれません
/^(あ|い|う)$/ ならマッチするのですが
古いPerl4のjperlなら /^[あいう]$/ でもマッチします
やはりこれはStrawberryPerlのバグ(または仕様)なのでしょうか
$str='あ';
if ($str =~ /^[あいう]$/) {print("match\n");}
を実行してみるとマッチしてくれません
/^(あ|い|う)$/ ならマッチするのですが
古いPerl4のjperlなら /^[あいう]$/ でもマッチします
やはりこれはStrawberryPerlのバグ(または仕様)なのでしょうか
511デフォルトの名無しさん
2024/03/16(土) 08:42:58.43ID:E8XsMGej print length $str; を入れてみたらわかる
512デフォルトの名無しさん
2024/03/16(土) 09:03:33.98ID:E8XsMGej もしかして: \p{sc=Hiragana}
513デフォルトの名無しさん
2024/03/16(土) 09:16:48.08ID:1WMRgWrv ネタにマジレス
514デフォルトの名無しさん
2024/03/16(土) 11:57:07.41ID:Xoe9pkvE515デフォルトの名無しさん
2024/03/16(土) 15:20:26.94ID:e8kHlvhU 少なくともperl5.8以降の文字クラスはuse utf8;前提になっててlengthが1じゃないとだめじゃね?
516デフォルトの名無しさん
2024/03/16(土) 15:27:36.56ID:HqlfXJdH 推奨されてないけど
use encoding 'sjis'
ならsjisでコード書けたと思う
jperlナツカシス
use encoding 'sjis'
ならsjisでコード書けたと思う
jperlナツカシス
517デフォルトの名無しさん
2024/03/24(日) 16:38:15.53ID:gHSiAGjm Windows では Filter::Encoding いれて使ってた
スクリプトは utf-8 で書いて use utf8 してたけど
コマンドラインでは -MFilter::Encoding=cp932 とか
スクリプトは utf-8 で書いて use utf8 してたけど
コマンドラインでは -MFilter::Encoding=cp932 とか
518デフォルトの名無しさん
2024/07/23(火) 22:33:05.15ID:Ott+kcdk https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_5.39.10
Strawberry Perl 5.39.10.1
Strawberry Perl 5.39.10.1
519デフォルトの名無しさん
2024/07/23(火) 22:33:17.30ID:Ott+kcdkレスを投稿する
ニュース
- 大阪府警の52歳警部 誕生会の宴席でプレゼント渡した部下殴り停職1か月「みんなから祝ってもらった高揚感、照れくささで殴ってしまった」 [Ailuropoda melanoleuca★]
- 【茨城】性行為の対価に偽1万円札10枚支払いか 消防本部課長を逮捕 偽札に気づいた女性が県警に相談して発覚したという [シャチ★]
- 婚姻数が戦後初の50万組割れ 「お金がなければ…」若者が結婚しない切実な理由 ★3 [首都圏の虎★]
- 【芸能】黒田勇樹「俺の子ではなかったということなのかな」 妻に子供のDNA鑑定を迫ると「離婚したい」と… 鑑定できず離婚 [冬月記者★]
- 【警視庁】歌舞伎町で売春客待ち“立ちんぼ”行為か 先月末までに88人逮捕 3割以上がホストクラブ等で遊ぶ金のため [シャチ★]
- スーパー立てこもりクマ パックに詰められた肉を食べた形跡は確認されず [Hitzeschleier★]
- 【画像】X女性「世の中の男へ。女へのクリスマスプレゼントはこれを渡せ!」女子共感→なぜか男がブチギレ [732289945]
- ホモホモしい🏡
- 【画像】水道水から有毒物質PFASが検出された場所マップ!お前ら、まさかここに住んでないよな・・??? [732289945]
- 【悲報】韓国🇰🇷 尹錫悦大統領、重罪か [573041775]
- 運転がヘッッタクソなやつがやりがちなこと wwwwww
- 【悲報】斎藤元彦陣営のネット広報担当会社が投稿したnoteで騒然 ★218 [931948549]