MIT-scheme写的一个数据处理程序
;;;in2out.scm ;;读取整个文件,每行为一项,返回列表。 (define (read-block iport) (do ((data '() (read-line iport)) (return '() (append return (list data))) ) ((eof-object? data) (cdr return)) ) ) ;;写文件,每个子项为一行 (define (write-block data port) (do ((data data (cdr data)) (return '() (if (null? data) '() (write-line (car data) port) ) ) ) ((null? data) return) ) ) ;;去掉整个列表的标签 (define (block-drop-flag data) (do ((data data (cdr data)) (result '() (append result (list (drop-flag (car data))))) ) ((null? data) result) )
) ;;扫描整个列表,标出每个类型数据的开始位置的索引,返回eg:(0 4 8 23 ...) ;;这功能可能用不上? (define (scan-block data) (do ((data data (cdr data)) (index 0 (+ index 1)) ? (flag #t (if (string=? (get-flag (car data)) (get-flag (car (cdr data)))) ?#t ?#f ? ?) ) ? ? ? (return '() (if (not flag)? (append return (list index)) return ) ) ) ((null? (cdr data)) (append return (list (+ index 1)))) ) ) ;;计算出每个字列的最大最小 生成一个新列表 (define (class-min-max data) (do ((data data (cdr data)) (return '() (append return (list (get-min-max2 (car data))))) )
((null? data) return) )
) ;;按标致分组给定列表 (define (div-block data) (do ((data data (cdr data)) (flag #t (if (string=? (get-flag (car data)) (get-flag (car (cdr data)))) ?#t ?#f ? ?) ) (return '() (if flag (append return (list (drop-flag (car data)))) (append '() (list (drop-flag (car data)))) ) ) (return2 '() (if flag ?return2 ?(append return2 (list return)) ?) ) ) ((null? (cdr data)) (append return2 (list (append return (list (drop-flag (car data))))))) ) ) ;;取列表中的最小值和最大值,返回min/max格式的字符串 (define (get-min-max data) (do ((data data (cdr data)) (maxa "" (cond ((string>? maxa (car data)) maxa) ((string>? (car data) maxa) (car data)) (else maxa) ?) ) (mina "" (cond ((string<? mina (car data)) mina) ((string<? (car data) mina) (car data)) (else mina) ?) ) ? );这里是结构体 ?;下面是结束条件 ((null? data) (string-append mina "/" maxa)) ) ) (define (get-min-max2 data) (define (iter xdata) ? ?(string-append (first xdata) "/" (list-ref xdata (- (length xdata) 1))) ) (iter (sort data string<?)) ) ;;返回去掉标签后的字符串,E1,20100909 => 20100909 (define (drop-flag str) (substring str (+ 1 (string-search-forward "," str)) (string-length str)) ) ;;获取给定字符串的标签,E1,20100909 => E1 (define (get-flag str) (substring str 0 (string-search-forward "," str)) ) ;;main (define (in2out inport outport) (write-block (class-min-max (div-block (read-block inport)))? outport ) ) ;;;;;------Main--------------------------------------------------- (define inport (open-input-file "D:Workroomwkroomin2outin.csv")) (define outport (open-output-file "D:Workroomwkroomin2outout.csv")) (newline) (define a (read-block inport)) (define b (div-block a)) (define d (class-min-max b)) (display (get-min-max2 '("20100909" "20100909"))) (write-block d outport) (newline) (close-all-open-files) ------------------------------运行方法--------------------------------------- start "" "D:MIT-GNU Schemebinmit-scheme.exe" ?--heap 5000 --library "D:MIT-GNU Schemelib" --load in2out.scm? -------------------------in.csv文件内容如下:部分不完整------------------------------------------- E1,20100909 E1,20110907 E1,20101021 E1,20101207 E2,20110513 E2,20101014 E2,20100918 E2,20100905 E3,20101230 E3,20101220 E3,20110310 E3,20110109 E3,20110301 E3,20110505 E3,20110427 E3,20110422 E3,20111214 E3,20111217 E3,20111108 E3,20131018 E3,20131004 E3,20130428 E3,20130417 E4,20101123 E4,20110802 E4,20120305 E4,20120312 E5,20110401 E5,20110711 E5,20111220 E6,20120327 E6,20120330 E6,20120515 E6,20120910 E7,20101231 E7,20101229 E7,20111129 E7,20120228 E7,20111205 E7,20111228 E8,20110623 E8,20110630 E8,20101231 E8,20110630 E9,20110622 E9,20110623 E9,20110220 E9,20110630 E10,20110506 E10,20110530 E11,20101231 E11,20110630 E12,20110529 E12,20110630 E13,20110210 E14,20101201 E14,20110630 E14,20110226 E14,20110630 E15,20110223 E15,20111120 E15,20110226 E15,20110226 E16,20110721 E16,20110829 -------------------------运行程序后输出out.csv---------------------------- "20100909/20110907" "20100905/20110513" "20101220/20131018" "20101123/20120312" "20110401/20111220" "20120327/20120910" "20101229/20120228" "20101231/20110630" "20110220/20110630" "20110506/20110530" "20101231/20110630" "20110529/20110630" "20110210/20110630" "20101201/20110630" "20110223/20111120" "20110721/20110829" "20110413/20110721" "20111120/20130812" "20101201/20101201" "20110218/20110609" "20101130/20110501" "20111207/20120726" "20111120/20130908" "20101201/20101201" "20110917/20130523" "20101229/20101229" "20111120/20130523" "20110116/20110116" "20110917/20130908" "20110529/20111120" "20130903/20130903" "20110111/20110111" "20110917/20130801" "20120401/20130802" "20130926/20130926" "20111030/20111030" "20130506/20131111" "20110912/20110912" "20101129/20130509" "20110912/20110912" "20101123/20111120" "20111031/20120906" "20110705/20110705" "20110705/20110705" "20110702/20110702" "20110702/20110702" "20110703/20110703" "20110703/20110703" "20110703/20110703" "20110703/20110703" "20110705/20110705" "20110705/20110705" "20110719/20110719" "20110705/20110705" "20110719/20110719" "20110719/20110719" "20110719/20110719" "20110719/20110719" "20110719/20110719" "20110719/20110719" "20110718/20110718" "20110719/20110719" "20101102/20101122" "20110718/20110718" "20110718/20110718" "20111031/20111031" "20111031/20111031" "20111221/20111221" "20121008/20121008" "20120527/20120527" "20120717/20120717" "20120730/20120730" "20120926/20120926" "20130328/20130328" "20110222/20110914" "20110218/20110913" "20110218/20110909" "20110727/20130322" "20110219/20110909" "20111130/20111130" "20111130/20111130" "20130427/20130427" "20130427/20130427" "20110222/20110909" "20110228/20110913" "20110503/20111203" "20130726/20130726" "20110223/20110908" "20110118/20110908" "20110913/20110913" "20110909/20110909" "20110909/20110909" "20110908/20110908" "20111217/20120830" "20121127/20121127" "20111205/20120327" "20110919/20110919" "20120129/20120401" "20111205/20111205" "20120129/20120129" "20110908/20120326" "20120129/20120401" "20140106/20140412" "20131220/20140304" "20131007/20140124" "20140112/20140225" "20140202/20140202" "20100903/20110815" "20101029/20130616" "20100910/20110901" "20101101/20130615" "20110701/20130515" "20110630/20140221" "20100915/20121103" "20101120/20110520" "20110620/20111221" "20120220/20121118" "20121218/20130618" "20130718/20131218" "20100929/20101101" "20111029/20111104" "20120830/20120925" "20101205/20110802" "20101027/20110424" "20101103/20131106" "20101023/20121024" "20101025/20121024" "20101025/20121024" "20101020/20120412" "20101009/20121024" "20111010/20131016" "20111009/20131016" "20110223/20111013" "20111019/20120106" "20120107/20120625" "20101227/20110801" "20110803/20111016" "20111018/20111214" "20111216/20121220" "20120422/20120612" "20120613/20130422" "20101122/20110224" "20110219/20110525" "20110525/20110807" "20110808/20111015" "20111016/20111213" "20111214/20120409" "20120410/20120613" "20120614/20120813" "20120814/20121009" "20121010/20121219" "20121221/20130602" "20130420/20130516" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |