2014年1月27日月曜日

開発環境

Real World Haskell―実戦で学ぶ関数型言語プログラミング(Bryan O'Sullivan (著)、 John Goerzen (著)、 Don Stewart (著)、山下 伸夫 (翻訳)、伊東 勝利 (翻訳)、株式会社タイムインターメディア (翻訳)、オライリージャパン)の4章(関数プログラミング)、4.5(リストを使う)、練習問題 4.をDartで考えてみる。

その他参考書籍

練習問題 4.

コード

sample.dart

import 'dart:html';

void main(){
  print('    '.split(''));
  var textarea = new TextAreaElement();
  FileReader reader = new FileReader();
  run.onClick.listen((MouseEvent event){
    try{
      File file = input.files.first;
      reader.readAsText(file);
      reader.onLoadEnd.listen((var event){
        String temp = reader.result;
        try{
          var result = convert(temp);
          var rows = result.split('\n').length;
          textarea.rows = rows;
          textarea.style.width = '650px';
          textarea.text = result;
          div.innerHtml = '';
          div.append(textarea);
        }catch(e){
          div.text += '$e\n';
        }
      });
    } catch (e){
      div.text += '$e\n';
    }
  });
  textarea.onClick.listen((MouseEvent event) => textarea.select());
}

InputElement input = querySelector('#f0');
ButtonElement run = querySelector('#run_dart');
DivElement div = querySelector('#d0');

String convert(String s){
  var lines = s.split('\n');
  var cols = 0;
  for(String line in lines){
    var m = line.length;
    if(m > cols){
      cols = m;
    }
  }
  var result = [];
  var temp = lines.first.split('');
  var rows = temp.length;
  for(var ch in temp){
    result.add(ch);
  }
  var i;
  for(i = 0; i < cols - rows; i += 1){
    result.add(' ');
  }
  result.add('\n');
  for(String line in lines.sublist(1)){
    temp = line.split('');
    rows = temp.length;
    for(i = 0; i < rows; i += 1){
      result[i] += temp[i];
    }
    while(i < cols){
      result[i] += ' ';
      i += 1;
    }
  }
  return result.join('\n');
}

0 コメント:

コメントを投稿