2010年3月 3日 (水)

Bento でレポートを作る(準備編)

Illustratorで作ったSVGの様式にBentoから書き出したデータを書き足すプログラムを作る。
ファイル操作はPerlがよいようだが、使えるプログラムはSchemeなのでDrSchemeを使う。
プログラマの専門家ではないのでださいプログラムだと思うが「test2.ss」を公開

始めの部分はSVGの一行をストリングにしてリストにした。SVGの最後の行、SVGファイルの終了のコマンドを取り除いている。
この後にレポートのデータを書き込む。

BentoのCSVを読み、SVGコマンドを付けたし、SVGファイルを完成させる。
後はファイルをデスクトップに書き出す。

| | コメント (0)

2010年2月 4日 (木)

データベースについて

データベースについて、しつこく勉強している。
雪が降って寒いので部屋にこもっている所為。
得意のDrSchemeのヘルプデスクに"Web Applications in PLT Scheme"と云うドキュメントが有り、SchemeからSQLiteを操作する、サンプルプログラムが有る。
コピーして実行してみると、エラーが出てストップ。
これ以上は前に進めない。ギブアップ。

昨日はこれで一日つぶした。

| | コメント (0)

2009年1月27日 (火)

DrScheme 4.1.4

コンピュータ・プログラミングはずぶの素人。会社の勉強会や通信教育、本を読んで学んだ。
Scheme流の技法が有るらしい。昔流のBASICやCのやり方でプログラムを書いている。関数へのデータの受け渡しをデータ領域を宣言して行っているのがダサイのかも。

"if"を使った行でもエラーが出た。

(if (テスト) (thenの処理) (elseの処理))

以前の版では(elseの処理)を書かなくても通ったがR6RSでは厳しい。

| | コメント (0)

2009年1月23日 (金)

DrScheme 4.1.4

電子計算機が新しくなったのでプログラム言語"DrScheme"をダウンロードしてインストール。
最初にインストールしたのはバージョン4.1.3。昔作ったプログラムが走らない。インストール間違いかバグかと思い最新バージョンを調査したら4.1.4になっているのでインストールし直す。

言語仕様がR6RS(The Revised6 Report on the Algorithmic Language Scheme)に変わっていた。
解ったのはデータ領域(空きリスト)a を確保する為の宣言は
(define a) -->R4RS (MacScheme時代)
(define a ()) -->R5RS
(define a null) -->R6RS
(define a '()) --> これが正解らしい(2/5追記)
プログラム言語 C をかじったことが有るがデータ型の宣言が厳しく閉口したがSchemeはおおらかであった。
オブジェクト指向とかデーター構造とかだんだん難しくなってきた。手に負えなくなってきている。
> (define a ())
は受け付けてくれない。エラーメッセージ。
> (define a null)
として
> a
とうつと
> ()
と返ってくる。
??。typhoon

解ったのはまだこれだけ。これからいろいろ出てくるだろうな。

| | コメント (0)

2008年2月19日 (火)

ログの解析 続き

掲示板1件分のデータを1行のstringに変換出来たので、更に名前、メール、url、タイトル、記事、時間に分割し処理しやすいように変換する。データは"<>"で区切られている。行の始めから"<"を検索し文字の位置をカウントする。合致したら次の文字が">"であれば始めの位置からカウントした文字までを抜き出してlistにする。

(do ((d log (cdr d))
     (ss ()))
  ((null? d) ss)
  (do ((i 0 (+ 1 i))
       (l (car d))
       (start-n 0)
       (end-n 0)
       (a ()))
    ((= i (string-length l))
     (set! a (append a (list (substring l start-n (string-length l)))))
     (set! ss (append ss (list a))))
    (if (char=? (string-ref l i) #\<)
        (if (char=? (string-ref l (+ i 1)) #\>)
            (begin
              (set! end-n i)
              (set! a (append a (list (substring l start-n end-n))))
              (set! start-n (+ i 2)))))))

結果は

(("all my child"
  "dvkq@hotmail.com"
  "http://all-my-child.group-love.com"
  "all my child"
  "Good site. Thanks.<br>"
  "2006/08/23 16:52:58")
("ass"
  "awiz@hotmail.com"
  "http://ass.pisdato.com"
  "ass"
  "Nice site. Thanks.<br>"
  "2006/08/23 16:18:58") ...)

1行分のデータが( )でくくられる。

| | コメント (0)

2008年2月15日 (金)

ログの解析 続き

list logの1行目を参照するには

(car log)
;結果
"all my child<>dvkq@hotmail.com<>http://all-my-child.group-love.com<>all my child<>Good site. Thanks.<br><>2006/08/23 16:52:58"

2行目を参照するには

(car (cdr log))
;結果
"ass<>awiz@hotmail.com<>http://ass.pisdato.com<>ass<>Nice site. Thanks.<br><>2006/08/23 16:18:58"

文字列stringから必要な文字列を抜き出す操作する関数に

(string-length string)           文字数
(string-ref string k)             k番目の文字を参照
(substring string start end) start番から end番の文字を抜き出す

等ある。

| | コメント (0)

ログの解析 続き

空きリストlogを作り、1件毎にstringに変換しlistにした。
「改行」を検出したらsをlogに追加しsを空にし文字を読み続ける。

速度はかなり改善された。

; 1行(1件)を1stringにしlistにする
(define s (make-string 0)) (define log ()) (call-with-input-file     "/Users/yasuo/Desktop/log.dat"   (lambda (inport)     (let loop ((c (read-char inport)))       (if (eof-object? c)           'done           (begin             (if (eq? #\newline c)                 (begin                   (set! log (append log (list s)))                   (set! s ""))                 (begin                   (if (eq? #\" c)                       (make-string 1 #\\))                   (set! s (string-append s (make-string 1 c)))))             (loop (read-char inport)))))))

日記は一行毎にstringに変換されlogにlist形式に格納される。

| | コメント (0)

2008年2月14日 (木)

ログの解析

日記代わりに使用していた、掲示板の投稿記録1件は

all my child<>dvkq@hotmail.com<>http://all-my-child.group-love.com<>all my child<>Good site. Thanks.<br><>2006/08/23 16:52:58

のように名前、メールアドレス、url 、タイトル、コメント、投稿時間の順に”<>”で区切られ、改行で終了として記録されている。これは不正書き込みされた例であるが。

始めに“log.dat"を一つのstringに変換する事を試みた。

(define s (make-string 0))
(call-with-input-file
    "/Users/yasuo/Desktop/log.dat"
  (lambda (inport)
    (let loop ((c (read-char inport)))
      (if (eof-object? c)
          'done
          (begin
            (if (eq? #¥" c)
                (make-string 1 #¥¥))
            (set! s (string-append s (make-string 1 c)))
            (loop (read-char inport))))))

凄く時間が掛る。
一文字追加する毎に前のデータを参照するので、データ量が増えてくると読み出すのに時間が掛るのだろう。
失敗。

| | コメント (0)

2008年2月10日 (日)

DrScheme

DrScheme日本語版について。
定義ウインド、対話ウインドにキーボードから日本語を入力しようとすると最初の1文字だけが入力出来る。多分OS Xの「ことえり」(Mac OS 10.3 (G3 Mac))との相性が悪いのだろう。
今日はようやく日記データを1行読む込むプログラムが出来た。

(call-with-input-file
    "/Users/yasuo/Desktop/log.dat"
  (lambda (inport)
    (let loop ((c (read-char inport)))
      (if (eof-object? c)
          'done
          (begin
            (if (eq? #¥newline c)
                'done
                (begin
                  (if (eq? #¥" c)
                      (begin
                        (write-char #¥¥)))
                  (write-char c)
                  (loop (read-char inport)))))))))

1文字づつ読み対話ウインドに書き込むプログラム。文字列"string"にするためデータ中の’"’を’¥"’に変換するようにもした。
stringは"abcd12345"と表される。

| | コメント (2)

ホームページの日記の編集

ホームページの日記の編集をしたがこれ又大変。ページ数を増やしたので各ページにリンク情報を貼付けるのに時間が掛ってしまった。

単純な機械的作業である。コンピュータのソフトを作り出来ないかと実験開始。ソフトを作れる言語はSchemeだけ。DrSchemeで日本語を操作出来るかチェック。日本語を読み込むと文字化けする。読み込んだ日本語をそのまま出力するともうめちゃくちゃになってしまう。

それではとPerlでと本を出して勉強開始したがこれも難しい。

昨日再度DrSchemeをいじってみた。ホームページのデータをコピーしてペーストしたらチャンと表示をした。ユニコード(UTF-8)ならチャンと働くんだと確認。演算も出来る。

(assq '草枕 '((坊っちゃん 夏目漱石)
              (草枕 夏目漱石)
              (舞姫 森鴎外)))

(草枕 夏目漱石)

日記のデータを読み込んでみたら正常に表示された。

| | コメント (0)