2013年12月3日火曜日

開発環境

C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅡ部(単純なプログラミング)の14章(ファイル入出力)、14.1(ファイル関数)、14.2(変換ルーチン)、14.3(バイナリファイルとASCIIファイル)、14.4(行終端にまつわる謎)、14.5(バイナリI/O)、14.6(バッファリングの問題)、14.7(バッファリングを行わないI/O)、14.8(ファイル形式の設計)、14.10(プログラミング実習)、実習 14-3をDartで解いてみる。

その他参考書籍

実習 14-3.

コード

sample.dart

import 'dart:html';

void main(){
  InputElement input = querySelector('#f0');
  InputElement run = querySelector('#run_dart');
  InputElement clear = querySelector('#clear');
  Element div = querySelector('#d0');
  TextAreaElement textarea1 = new TextAreaElement();
  TextAreaElement textarea2 = new TextAreaElement();
  textarea1.readOnly = true;
  textarea2.readOnly = true;
  textarea1.style.width = '650px';
  textarea1.style.overflow = 'auto';
  textarea1.style.wordWrap = 'normal';
  textarea1.cols = 2;
  textarea2.style.width = '650px';
  textarea2.style.overflow = 'auto';
  textarea2.style.wordWrap = 'normal';
  textarea2.rows = 2;
  var reader = new FileReader();
  run.onClick.listen((MouseEvent event){
    String result = window.navigator.userAgent + '\n';
    try{
      File file = input.files.first;
      reader.readAsText(file);
      reader.onLoad.listen((Event event){
        String contents = reader.result;
        List<String> strings = triple(contents);
        textarea1.text = strings.first;
        textarea2.text = strings[1];
        div..append(textarea1)
          ..append(textarea2);
      });
    } catch (e){
      div.text = '$e';
    }
  });
  textarea1.onClick.listen((MouseEvent event) => textarea1.select());
  textarea2.onClick.listen((MouseEvent event) => textarea2.select());
  clear.onClick.listen((MouseEvent event) => div.text = '');
}

List<String> triple(String s){
  List<String> result = ['', ''];
  RegExp pattern = new RegExp(r'(\s+|\n)');
  for (String x in s.split(pattern)){
    if (!pattern.hasMatch(x) && !(x == '') &&
        new RegExp(r'(-)?\d+').hasMatch(x)){
      if (int.parse(x) % 3 == 0){
        result[0] += '$x ';
      } else {
        result[1] += '$x ';
      }
    }
  }
  return result;
}

0 コメント:

コメントを投稿