I/O中的一些问题的研究
来源:互联网 发布:免实名域名注册 编辑:程序博客网 时间:2024/06/05 00:42
file-position 接受一个打开的流,然后返回文件的当前位置,也就是读取或者写入该流的元素的数量。
1:从io4.db中往io3.db中输入数据,并且显示读入和写入的元素的数量。下面是我考到wps中,输出显示格式,你发现他在第二个引号换行了,然后他后面也换行了。在后面换行的话,正常,因为在write-line的时候,他会给字符串加上一个换行符,然后我就测试了一下在wps的doc里面是不是碰见13 CR也同样会换行,也就是说现在wps中的doc里面碰见13CR/10LF中任何一个都会换行。
CL-USER> (with-open-file (out "d:/emacs/io3.db" :direction :output :if-exists :supersede) (with-open-file (in "d:/emacs/io4.db") (loop for line = (read-line in nil)while linedo(format t "in file-position : ~s~%" (file-position in)) (write-line line out) (format t "out file-position : ~s~%" (file-position out)) (format t "~s~%" line))))in file-position : 7out file-position : 7"nihao"in file-position : 13out file-position : 13"lili"in file-position : 15out file-position : 16"hi"NIL验证在wps中的doc里面碰见13CR/10LF中任何一个都会换行。
CL-USER> (with-open-file (out "d:/emacs/io.doc" :direction :output :if-exists :supersede :element-type '(unsigned-byte 8)) (loop repeat 10do(write-byte (read *query-io* nil) out) (format t "out file-position : ~s~%" (file-position out))))97out file-position : 113out file-position : 298out file-position : 310out file-position : 499out file-position : 5100out file-position : 613out file-position : 7101out file-position : 810out file-position : 9101out file-position : 10NIL最后在doc中显示形式如下,也就是当10/13时都换行了。
a
b
cd
e
e
验证在txt里面13CR/10LR的效果
CL-USER> (with-open-file (out "d:/emacs/io3.txt" :direction :output :if-exists :supersede :element-type '(unsigned-byte 8)) (loop repeat 12do(write-byte (read *query-io* nil) out) (format t "out file-position : ~s~%" (file-position out))))97out file-position : 110out file-position : 298out file-position : 313out file-position : 499out file-position : 513out file-position : 610out file-position : 7100out file-position : 810out file-position : 913out file-position : 10101out file-position : 11102out file-position : 12NIL在io3.txt里面的形式,但是如果你再把下面的结果再放到doc他又会是另一种形式,因为13/10仍旧是存在的,只是不显示出来,我又把io3.txt按二进制流读了出来。可以看到13/10都在,所以说在wps中会是另一种景象。
CL-USER> (let ((in (open "d:/emacs/io3.txt" :element-type '(unsigned-byte 8)))) (loop for c = (read-byte in nil) while c do(format t "~a" c)) (close in)) 971098139913101001013101102T2:上面说的是wps中编码的情况,下面说一下为啥写了16个而却只读了15个字符?
因为当readline的时候,他会把newline去掉然后把剩下的封装成string作为值。(readline可以佐证因为只有13才会输出显示^M)。同时如果你把io3.db按照原样二进制流输出最后一个字符为10,也就是newline.因为write-line会给字符串加上一个newline,所以你才会发现前面收支是平衡的,直到读最后一行时,因为源文件的最后一行没有换行符,而在write-line的时候给他加了一个newline,所以也就多了一个。
我按二进制流输出刚才写入到的io3.db中的内容你发现却是多了一个10
CL-USER> (let ((in (open "d:/emacs/io3.db" :element-type '(unsigned-byte 8)))) (loop for c = (read-byte in nil) while c do(format t "~a" c)) (close in)) 110105104971111310108105108105131010410510T第二种佐证方式:既然read-line他会剔除newline10,那么我们就看一下read-line的结果是不是却是少了10.而我为啥用图片呢?因为我发现如果我粘代码跟结果的话,最后结果显示是图片下面的那个形式。也就是说本身csdn里面碰到13也是会换行的。图片中确实是多了一个^M,我上一篇已经说了^M是13.
"nihao""lili""hi"NIL3:其实我现在一直有个疑问,就是如果你直接复制repl中的代码粘贴到本地的txt,他格式不变。因为在txt里面换行是1310,为啥在repl时候他没有显示为^M形式呢?下面是我从cl-user后面剪切一段代码然后放到txt里面的输出形式输出结果
CL-USER> (let ((in (open "d:/emacs/test.txt" :element-type '(unsigned-byte 8)))) (loop for c = (read-byte in nil) while c do(format t "~a" c)) (close in)) 40108101116324040105325241411310932323240494141源文件:
(let ((i 4))
(1))
总结:with-open-file可以进行嵌套同时对多个流进行控制,只是注意他们的语法作用域。
(read *query-io* nil)读取从键盘端输入的数据,(write-line *query-io*)输出显示到显示器上面
wps/csdn/txt 他们碰到13/10字符时的效果不一样。
- I/O中的一些问题的研究
- FPGA中的I/O电平研究
- 关于I/O的一些脚本
- 标准I/O缓存的一些理解
- 关于I/O的一些记录
- I/O 流的一些自我总结
- Java的一些高级特性(七)——Java7中的I/O
- 使用STC15W4K系列单片机需要注意I/O口的一些问题
- C++中的简单文件的I/O
- C++中的字符/字符串的I/O
- OverLapped I/O Socket 的问题
- 一些可以研究的问题
- java中的I/O
- python中的I/O
- Java中的I/O
- I/O问题总结
- C++ I/O问题
- MySQL I/O 问题
- 在一个aspx或ashx页面里进行多次ajax调用
- Ext.app.Application
- 修改build.prop, 优化Android
- ajax的post请求
- CSP开发基础--开发实例一
- I/O中的一些问题的研究
- Oracle 11g用exp无法导出空表的处理发布方法
- ssh简介
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- 51 单片机 sprintf 数字格式问题
- zb的生日&&dfs
- 浅谈Java与策略模式
- 链表与数组的异同
- 字节序及对堆栈的影响