2013年11月19日火曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の8章(ファイル処理)、8.8(練習問題)、4.をDartで解いてみる。

その他参考書籍

8.8(練習問題)、4.

コード

sample.dart

import 'dart:html';

void main(){
  var run = querySelector('#run'),
      clear = querySelector('#clear'),
      pre = querySelector('#pre0'),
      reader = new FileReader();
  InputElement input = querySelector('#f0');
  input.accept = 'text/*';
  run.onClick.listen((MouseEvent event){
    var result = window.navigator.userAgent + '\n';
    try {
      File file = input.files[0];
      reader.readAsText(file);
      reader.onLoad.listen((Event event){
        String text = reader.result;
        result += '元のテキスト\n';
        result += '$text\n';
        try{
         int smallest = readSmallestSkip(text.split('\n'));
         result += '最小値: ${smallest}\n';
         pre.text = result;
        } catch (e){
          result += e.toString();
          pre.text = result;
        }
      });
    } catch (e){
      result += e.toString();
      pre.text = result;
    }
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

List<String> skipHeader(List<String> lines){
  lines.removeAt(0);
  String line = lines.first;
  while (line.startsWith('#')){
    lines.removeAt(0);
    line = lines.first;
  }
  return lines;
}

int readSmallestSkip(List<String> lines){
  lines = skipHeader(lines);
  lines = lines.map((String line) => line.trim()).toList();
  if (lines.first == ''){
    return 0;
  }
  RegExp pattern = new RegExp(r'^\d+$');
  lines = lines.where((String line) => pattern.hasMatch(line)).toList();
  if (lines.length == 0){
    throw 'エラー: データが無い';
  }
  int smallest = int.parse(lines.first);
  for (String line in lines.sublist(1)){
    int value = int.parse(line);
    if (value < smallest){
      smallest = value;
    }
  }
  return smallest;
}















						

0 コメント:

コメントを投稿