FC2ブログ

R 学習:ファイル入力オープン・モード

2013-09-24 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での、blogramのランクインカテゴリは、
1、1、4、0、0、 1、2、1、0、1(38)で、換算ポイント 47pt 。
C言語、Perl とも3位ダ。
・-・ - -・

さて、本文。

先日の
R 学習:seek 関数
で、
現在位置を取得する「seek」関数が、使い物に成らない
ので、対処法を考えていた。


それなら、いっそのこと、
ファイルを、バイナリ入力モードで1回オープンするだけで
処理をしたらどうか???

このとき、
1.位置付けの「seek」は正しく動作するとして。
2.一切「seek」を使わないで。

と二方法を考えて、テスト(確認)していた。


その途中で、“ふと”思いついた。

バイナリ入力モードでオープンした場合、
テキスト入力は出来ないのか???

つまり、

  IN <- file( "hogehoge.pgm", "rb" )  # 入力・バイナリ
  w <- readLines( IN, 1 )

は出来無いのか???

・・・・・

できるのだ!!!

ならば、
(以下のソースコードには、空白は大半が2バイト文字)

  IN <- file( "hogehoge.pgm", "rb" )  # 入力・バイナリ
  w <- readLines( IN, 1 )   # skip 'P5'
  w <- readLines( IN, 1 )   # 列数、行数
  v <- as.numeric(unlist(strsplit(w," ")))
  x <- v[1];  y <- v[2]
  w <- readLines( IN, 1 )   # skip GrayScale
  v <- readBin( IN, "raw", 999 )  # 999 は一例
  close( IN )

これで、(バイナリの)画像データ部分が読める。



序でに、逆はどうか

つまり、

  IN <- file( "hogehoge.pgm", "rt" )  # 入力・テキスト
  v <- readBin( IN, "raw", 555 )  # 555 は一例

は???

ダメでした。


つまり、
「readLines」は、
モードが、テキスト/バイナリどちらでも使える。
しかし、
「readBin」は、テキスト・モードではダメ。
バイナリ・モードであるべき。



-----

それでは、Perl ではどうなのか???

入力オープンして、
何行か読み込んでから、「binmode」とすることは・・・可能。

オープン直後に「binmode」としても、・・・
テキスト行として読めるし、
( $W=<ファイルハンドル>; )
当然バイナリモード読み込みも可能。
( read( ファイルハンドル, $W, バイト数 ); )

さらに、「binmode」が無くても、・・・
バイナリモード読み込みが出来る。
( read( ファイルハンドル, $W, バイト数 ); )
当然テキスト行として読める。
( $W=<ファイルハンドル>; )



結論:

R では、バイナリモードでオープンしておいて、
読み込み用関数を2種類使い分けるだけ。
(「readLines」と「readBin」)

Perl なら、「binmode」なんて忘れて(?)、
 $W=<ファイルハンドル>;
 read( ファイルハンドル, $W, バイト数 );
を混在できる。



見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


130919
関連記事
スポンサーサイト



コメントの投稿

管理者にだけ表示を許可する

人気blog Ranking



最新記事
カレンダー
06 | 2021/07 | 08
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

FC2 / i2i / Google




Google Analytics
ブックマーク