Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

2011年2月24日木曜日

PDFのぺーじのサイズを変更する2

ようやく着手しました。C#で作り始めました。
UIはこんな感じ。

コンボボックスに用紙サイズを登録する部分で
サイズをひとつづつ追加してたらとてもパフォーマンスが悪くなってしまいました。

以下のような変更ではやくなったので、メモ。

コントロールへの項目の追加にはaddrange()を使用すべきという
記述がこちらにあったので、まずはそれを実施。
http://msdn.microsoft.com/ja-jp/magazine/ee221437.aspx

for文のなかで配列を作って、最後にコンボボックスにaddrange()で代入。という風に作り変えてみたがあまり変化がなかった。

その後、コレクションを配列に変換できることがわかり、そのように手直ししたところ
パフォーマンス的な問題はなくなった。for文もなくなりとてもすっきり。

■変更前のソース
  1. PaperSize pkSize;  
  2. for (int i = 0; i < printDoc.PrinterSettings.PaperSizes.Count; i++ )  
  3. {  
  4.     pkSize = printDoc.PrinterSettings.PaperSizes[i];  
  5.     comboPaperSize.Items.Add(pkSize);  
  6. }  
■変更後のソース
  1. PaperSize[] pkSizearr = new PaperSize[printDoc.PrinterSettings.PaperSizes.Count];  
  2. printDoc.PrinterSettings.PaperSizes.CopyTo(pkSizearr, 0);  
  3. comboPaperSize.Items.AddRange(pkSizearr);  
★ついでにコレクションから配列に変換する方法もわかったので、メモ
  1. コレクション.CopyTo(配列, 0)  

0は何番目からコピーするかをしていする。

2011年2月22日火曜日

perlでCSVファイルの読み込み。2

------------------
■概要
------------------
前回のものをText::CSV_Xを用いて書き換える。

Text::CSV_Xを使用すると、「セルの中にコンマが含まれてる場合」や「引用符""で囲まれている場合」
などのめんどくさいケースを考慮する必要がなくなる。

らしい。
------------------
■コード(全部)
------------------
  1. use strict;  
  2. use warnings;  
  3. use Text::CSV_XS;  
  4. #-------------------------  
  5.   
  6. open(FH," < team.csv");  
  7. my @list = <fh>;  
  8. close(FH);  
  9.   
  10. my $csv = new Text::CSV_XS({binary => 1});   
  11. my %hash;  
  12. foreach my $line( @list )  
  13. {  
  14.  $csv->parse($line) || die "parse失敗: " . $csv->error_input() . "\n";  
  15.  my ( $key, @items ) = $csv->fields();  
  16.  $hash{$key} = [@items];  
  17. }   
  18.   
  19. printarrayhash( %hash );  
  20.   
  21.   
  22. #-------------------------  
  23. sub printarrayhash  
  24. {  
  25.  my %hash = @_;  
  26.  foreach my $key( keys( %hash ) )   
  27.  {  
  28.      print "キー値 : $key\n";  
  29.      my @val = @{$hash{$key}};  
  30.        
  31.      my $length = @val;  
  32.      print "length =$length\n";  
  33.      print "val = @val\n";  
  34.   }  
  35. }  
  36. </fh>  

fontを選択する

fontを選択するときに、フォントのファイル名ではなく、font名?でやりたいなぁと考えている。

InstalledFontCollectionを使うと、フォント名の一蘭がとれそうだけど、
それとフォントファイル名まではとれなそうだなぁ。

2011年2月19日土曜日

perlでCSVファイルの読み込み。

概要
CSVファイルを読み込み、それを配列のハッシュにする方法について簡単にまとめます。

よみこむファイル
住所録や名簿てきなものではなく、キーによっては要素数が変わるようなものを想定してます。

ベアーズ,山田、鈴木、佐藤、
タイガース、田中、中田、中島、トム
ライオンズ、マイケル、ジャクソン、トーマス、ディック

住所録的なものはこちらで、
http://codezine.jp/article/detail/904?p=1

コード
  1. my %hash;  
  2. foreach my $line( @list )  
  3. {  
  4.  chomp $line;   
  5.  my ( $key, @items ) = split( /,/, $line );  
  6.  $hash{$key} = [@items];  
  7. }  

ポイント(苦労した点)は9行目と10行目です。

まずは、my ( key, @items ) = split( /,/, line );です。
このような書き方で、CSVの最初の文字列をkeyという変数に、 2つ目の文字列以降を配列に代入することができます。 次に、hash{$key} = [@items];です。
これでハッシュにキーとアイテム(配列)を追加しています。
※とりあえず動いてます。

コード(全部)
  1. use strict;  
  2. use warnings;  
  3. #-------------------------  
  4.   
  5. open(FH,"  < team.csv");  
  6. my @list = <fh>;  
  7. close(FH);  
  8.   
  9.   
  10. my %hash;  
  11. foreach my $line( @list )  
  12. {  
  13.  chomp $line;   
  14.  my ( $key, @items ) = split( /,/, $line );  
  15.  $hash{$key} = [@items];  
  16. }   
  17.   
  18. printhash( %hash );  
  19.   
  20.   
  21. #-------------------------  
  22. sub printhash  
  23. {  
  24.  my %hash = @_;  
  25.  foreach my $key( keys( %hash ) )   
  26.  {  
  27.      print "キー値 : $key\n";  
  28.      my @val = @{$hash{$key}};  
  29.        
  30.      my $length = @val;  
  31.      print "length =$length\n";  
  32.      print "val = @val\n";  
  33.   }  
  34. }  
  35. </fh>  


出力結果
キー値 : タイガース
length =4
val = 田中 中田 中島 トム
キー値 : ベアーズ
length =3
val = 山田 鈴木 佐藤
キー値 : ライオンズ
length =4
val = マイケル ジャクソン トーマス ディック

perl 備忘録

■連想配列
・初期化
  1. %Hash = () ;  
・値を代入
  1. $Hash{key} = value;  
■その他
・コメント
  1. #コメントです。  
・変数
  1. $abc   # $をつけると変数となる。  

・文字列
シングルクォートとダブルクォートがあり、どっちでもよいみたい。

・おまじない。
以下の文字列をファイルの先頭につけると、実行時に警告がでるようになる。やったほうがよい。
  1. use strict;  
  2. use warnings;