2013年11月17日日曜日

開発環境

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

その他参考書籍

8.8(練習問題)、2.

コード

sample.dart

import 'dart:html';

void main(){
  var run = querySelector('#run'),
      clear = querySelector('#clear'),
      pre0 = querySelector('#pre0'),
      reader = new FileReader();
  InputElement input = querySelector('#f0');
  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';
        for (var item in readWeatherData(text)){
          result += '$item\n';
        }
        pre0.text = result;
      });
    } catch (e){
      result += e.toString();
      pre0.text = result;
    }
  });
  clear.onClick.listen((MouseEvent event) => pre0.text = '');
}

List<List<num>> readWeatherData(String s){
  List<List<List<num>>> result = [];
  var fields = [[[4, 'int'], [2, 'int'], [2, 'int']],
      [[2, 'int'], [2, 'int'], [2, 'int']],
      [[2, 'int'], [2, 'int'], [2, 'int']],
      [[6, 'double'], [6, 'double'], [6, 'double']]];
  s = s.trim();
  List<String> lines = s.split('\n');
  for(String line in lines){
    int start = 0;
    List record = [];
    for(List field in fields){
      print(field);
      List<num> group = [];
      for (List f in field){
        int width = f[0];
        String t = f[1];
        print(line);
        String text = line.substring(start, start + width);
        num value = t == 'int' ? int.parse(text) : double.parse(text);
        group.add(value);
        start += width;
      }
      record.add(group);
    }
    result.add(record);
  }
  return result;
}















						

0 コメント:

コメントを投稿