大榕树——让我们共成长!
大榕树 myDrs.org
您的位置:大榕树 \ 编程       |  Logo语言   |  Pascal语言   |  信息学奥赛   |  高考保送    |  HTML版本
|  Pascal语言>>Pascal入门>>PascalFAQ之输入输出         本站全文搜索: 友情提示:

PascalFAQ之输入输出
http://www.mydrs.org  1/1/2003  大榕树


在进行文件输入输出操作时可否免去文件变量参数?

可以,方法是设置默认输入输出文件。System单元提供了两个正文文件变量Input和Output,它们是默认的输入输出文件参数,在程序启动时,这两个变量会自动指向并打开默认的输入输出设备(如键盘和显示器),在程序结束后,这两个变量会自动关闭所指向的文件。你可以通过改变这两个变量所指向的文件来自定义默认输入输出文件,下面是一个简单的样例:

var
  S: string;

procedure SetIOFiles(const InputName, OutputName: string);
begin
  Close(Input);
  Assign(Input, InputName);
  Reset(Input);
  Close(Output);
  Assign(Output, OutputName);
  Rewrite(Output);
end;

begin
  SetIOFiles('Input.txt', 'Output.txt');
  Readln(S); { inputs S from text file "Input.txt" }
  Writeln(S); { outputs S to text file "Output.txt" }
end.

在DOS下,把文件名设为空串或者“con”可以指向默认的输入输出设备(如键盘和显示器)。

注意,在Free Pascal中,正文文件变量Input和Output不会在程序结束时自动关闭所指向的文件,这可能会造成输出数据遗失,因此你需要在程序结束的地方明确地关闭它们。

函数SeekEoln、SeekEof和Eoln、Eof有什么区别?

SeekEoln和Eoln用于判断文件行结束,SeekEof和Eof用于判断文件结束,但它们之间还是有区别的。Eoln和Eof只判断当前的所在位置是否位于行结束符上或者文件尾部,而SeekEoln和SeekEof会自动跳过所有连续的空格和制表符再进行判断,因此,在执行函数SeekEoln或SeekEof后,当前的所在位置不会是空格或者制表符。

为何我的程序结束后其输出文件无内容?

这可能是由于在输出数据后没有关闭输出文件所造成的,或许是你忘了在程序结束的地方关闭文件,也或许是在关闭文件前你的程序就在某个地方终止了。Pascal在向正文文件输出数据时,不一定立即就写进磁盘里,只要剩余缓冲区足够,Pascal会先把数据复制到正文文件变量内置的缓冲区中去,直到缓冲区满或者关闭文件时才真正把缓冲区内的数据写进磁盘文件中。但你可以在输出数据后调用System单元的过程Flush(var F: Text)来强制把缓冲区内所有的数据立即写进磁盘文件中并清空缓冲区。

如何设置正文文件缓冲区的大小?

Pascal不提供直接设置缓冲区大小的功能,但提供设置缓冲区的功能。在System单元中含有一个过程SetTextBuf(var F: Text; var Buf [ ; Size: Word ] ),使用它可以为正文文件自定义缓冲区,下面是一个简单的样例:

 var
  F: Text;
  Buf: array[0..4095] of Byte; 

begin
  Assign(F, 'Input.txt');
  SetTextBuf(F, Buf, SizeOf(Buf)); { or SetTextBuf(F, Buf); }
  Reset(F); { or Rewrite(F); }
  ...
  Close(F);
end.

注意,SetTextBuf必须在对文件进行任何读写操作之前使用,否则将会造成数据遗失,至少要紧跟在Reset、Rewrite或Append的后面。另外,由于Pascal为每个正文文件变量都内置了一个128字节的缓冲区,因此设置尺寸小于128字节的缓冲区是毫无意义的。一般情况下,设置一个8KB或16KB左右的缓冲区就可以使正文文件读写的速度显著提高了。


作 者:陈世熹
共有5612位读者阅读过此文

  • 上篇文章PascalFAQ之内存分配
  • 下篇文章PascalFAQ之语法专题

  • 发送邮件
    保存页面 打印文章 HTML版本 发表评论

    □- 近期热门文章 □- 相关文章
    1. NOIP2006竞赛大纲 [8307]
    2. 七类高中生具有保送资格 [5911]
    3. NOI2006获奖选手名单 [4956]
    4. 关于举办NOIP2006模拟赛的通告 [4107]
    5. Turbo Pascal各语句运行速... [3595]
    6. Turbo王者归来新Delphi免费... [3182]
    7. IOI2006我国4名选手全部获得金... [2946]
    8. 关于APIO2007与IOI2007... [2764]
    9. noip倒计时 by 枯叶蝴蝶 [2684]
    10. 朱泽园:思想上的金牌更重要 [2169]
    PascalFAQ之特殊技术
    PascalFAQ之基本技巧
    PascalFAQ之数据类型
    PascalFAQ之语法专题
    PascalFAQ之输入输出
    PascalFAQ之内存分配
    PascalFAQ编译指示专题
    PascalFAQ编译模式专题
    PascalFAQ编程工具专题
     

    关于本站 | 合作伙伴 | 联系方式
    大榕树 版权所有 ©1999-2006 www.myDrs.org 闽ICP备05000721号