2013年12月23日月曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の12章(各種ツール)、12.7(練習問題)、12-19.をDartで解いてみる。

その他参考書籍

12.7(練習問題)、12-19.

コード

sample.dart

import 'dart:html';

void main() {
  InputElement input = querySelector('#f0');
  InputElement run = querySelector('#run_dart');
  InputElement clear = querySelector('#clear');
  Element pre = querySelector('#pre0');
  RegExp pattern = new RegExp(r'\s+');
  run.onClick.listen((MouseEvent event){
    pre.text = '${window.navigator.userAgent}\n';
    try{
      File file = input.files.first;
      FileReader reader = new FileReader();
      reader.readAsText(file);
      reader.onLoad.listen((Event event){
        try{
          String contents = reader.result;
          var lines = contents.split('\n');
          var first = lines.first;
          var first_words = first.split(pattern).map(
              (String s) => s.trim()).toList();
          if(first_words.first != 'COMPND'){
            throw 'COMPNDが欠けている';
          }
          var molecule = [first_words[1]];
          var i = 1;
          for(String line in lines.sublist(1)){
            if(line.startsWith('END')){
              break;
            }
            var words = line.split(pattern);
            if(words.length != 6){
              throw 'データが欠けている';
            }
            if(words[0] != 'ATOM'){
              throw 'ATOMが見つからない';
            }
            if(words[1] != '$i'){
              throw 'IDが不正';
            }
            if(!(new RegExp(r'^\w+$')).hasMatch(words[2])){
              throw '原子記号が不正';
            }
            for(var n in words.sublist(3)){
              if(!(new RegExp(r'^(-)?\d+(.\d+)?$')).hasMatch(n)){
                throw '座標が不正';
              }
            }
            molecule.add(words);
            i += 1;
          }
          pre.text += molecule.toString();
        } catch(e){
          pre.text += '$e';
        }
      });
    }catch(e){
      pre.text += '$e\n';
    }
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}
















						

0 コメント:

コメントを投稿