Tcl——访问文件(二)

10 篇文章 13 订阅
订阅专栏

一  open 和 close

不论是读取文件还是写入文件,我们都需要先打开一个文件,Tcl 通过 open 命令打开一个文件。

open 命令的语法规则为:

# open 命令的语法规则
set file [open "path/to/file.extension" mode]

其中 ,"path/to/file.extension" 是要打开的文件的路径,mode 是打开文件的模式。mode 可以是以下之一:

打开文件的模式选项
选项解释
r只读模式
w写入模式
a追加模式

非常重要的概念!!!

open 命令的返回值是一个文件句柄,文件句柄就是一个指向打开文件的指针。它允许你读取或写入文件,你可以使用文件句柄进行各种操作,例如读取文件内容或将数据写入文件。 

我们对文件句柄执行完各种操作后,需要通过 close 命令来关闭文件。关闭文件可以释放文件句柄。如果不关闭文件,文件句柄将一直存在于内存当中,会导致内存泄漏和系统资源浪费。因此关闭文件,是一个良好的编程习惯。


二  读取文件

Tcl 提供了多种方式来读取文件,包括读取整个文件逐行读取文件、读取特定行等。 

2.1  读取整个文件 —— read

read 命令的返回值是从文件中读取的内容。
例如,在当前目录下有名为example.txt文件。通过 open 命令打开,read 读取,close 关闭。

# read命令读取整个文件内容
set file [open "./example.txt" r]
set content [read $file]
puts $content
close $file

2.2  逐行读取 —— gets

gets 命令后接两个参数:第一个是 open 命令的返回值,第二个是一个变量,用于存储文件内容。
gets 命令的返回值是内容的大小(以字节为单位),读到文件末尾时,gets 返回 -1 。

# gets命令语法规则
gets fileID varName

其中,fileID 是文件句柄,即使用 open 命令打开文件时返回的指针。varName 是变量名,用于存储从文件中读取的数据。

set fileID [open "./example.txt" r]
while {[gets $fileID lines] != -1 } {
    puts $lines
}
close $fileID

在这个例子中,我们使用 open 命令打开 example.txt 文件,并将返回的文件句柄存储在 fileID 中。然后,我们使用 while 循环 gets 命令逐行读取文件的内容,并将每行的内容输出到控制台。最后,我们通过 close 命令关闭文件,释放文件句柄和系统资源。

2.3  读取特定行

# 读取文件的特定行
set file [open "example.txt" r]
set content [read $file]
set lines [split $content "\n"]
puts [lindex $lines 3]
close $file

可以结合各个命令来实现打印某一行的内容

三  写入文件

Tcl 也提供了多种方式来写入文件,包括写入整个文件逐行写入文件、写入特定行等。 

3.1  写入整个文件 —— puts

# puts写入数据
set fid [open "example.txt" w]
set content "Hello,world!"
puts $fid $content
close $fid

可以看到,写文件是,如果文件已存在,则写入的数据会覆盖原始的内容!

3.2  阻止换行 —— puts -nonewline

set file [open "example.txt" w]
set content {"line1" "line2" "line3"}
foreach line $content {
    # 阻止换行
    puts -nonewline $file $line
}
close $file

3.3  写入特定行 —— seek 命令

set file [open "example.txt" r+]
seek $file 0 end
puts $file "new line"
close $file

 

 通过 seek 命令在文件的末尾添加文本

总结:关于puts命令的新理解,puts命令是Tcl中用于输出文本信息的命令。它的语法规则如下:

puts ?-nonewline? ?channelId? string

其中 nonewline 和 channelId 是可选参数,例如在本文中的使用就用上了这两个可选参数。

其中,-nonewline 是一个可选参数,用于指定输出的字符串末尾不添加换行符。channelId 也是一个可选参数,用于指定输出的通道,例如本文的文件句柄(指针)。

Tcl 语言—— 文本操作篇
记录所学,分享知识,结识挚友
03-28 6722
目录 1、文件访问 2、文件写入 3、综合示例 参考说明 续上篇,继续学习 Tcl 语言…… 1、文件访问 文件打开: 语法:open 文件 打开方式 功能:打开指定的文件 以上是文件访问的方式。 内容读取: 语法:gets 文件ID 变量名 功能:读取文件ID标识的下一行,并且将该行内容赋给变量,返回该行的字符数。 如果到文件尾部 返回-1 文件关闭: 语法:close 文件ID 功能:关闭已打开的文件 示例: 源文件: ..
tcl学习
qq_15092585的博客
02-06 165
【代码】tcl学习
tcl脚本语言之file的常见用法
最新发布
hzmscut的博客
05-24 690
这些命令覆盖了从文件属性获取、修改、复制、删除、路径处理等广泛的文件操作需求。命令用于处理文件系统操作。
Tcl文件操作---gets需注意的一小点
热门推荐
sheepc的专栏
09-07 1万+
gets fileId ?varName? 读 fileId 标识的文件的下一行,忽略换行符。 如果命令中有varName就把该行赋给它,并返回该行的字符数(文件尾返回-1) 如果没有 varName参数,返回文件的下一行作为命令结果(如果到了文件尾,就返回空字符串)。 需提出注意的是:有varName参数和没有varName参数的文件尾返回标志是不一样的。有varName参数,文件
TCL练习1:open、eval和proc
yinyeyy的专栏
04-06 2974
简单使用open、eval和proc。 open可用于打开、创建文件。 eval带一个或多个变元,可以由一个或多个命令组成,eval采用concat命令的风格连接所有变元,执行命令并且返回执行结果。 proc可以创建一个过程,以便在程序其他地方重复调用。 proc create_report { reportName command } { set status "." append status $reportName ".fail" if { ![file exists $stat
Tcl文件操作与程序调用
weixin_48943109的博客
08-01 922
其中fileName:用于打开的文件名。access是文件存取模式,默认读,其余如下。语法:open fileName?permission?permissio是一个八进制数,用于设置文件访问权限。
Tcl常用命令备忘录-访问文件
m0_61544122的博客
06-08 3562
示例解释:以上例子中,我们首先使用open命令打开一个文件,该文件的名字为"output.txt",操作为写文件("w")。第三个例子中,使用file exists检查文件是否存在,如果存在则打开文件,使用read读取文件内容,并输出到控制台。第一个例子中,使用file exists检查文件是否存在,如果存在则输出"文件存在",否则输出"文件不存在"。如果test.txt存在,则输出"文件存在",否则输出"文件不存在"。如果test.txt文件存在,则输出文件内容,否则输出"文件不存在"。
TCL脚本文件读取和写入--实操版
aaaaaaaa585的博客
08-18 6875
TCL脚本文件读取和写入
TCL文件访问
GGbao_的博客
05-19 1916
如果 cd 没使用参数,UNIX 下,会把工作目录变为启动 TCL 脚本的用户的工作目录,WINDOWS 下会把工作目录变为 windows 操作系统的安装目录所在的盘的根目录(如:C:/)。file lstat name arrayName 除了利用 lstat 内核调用代理 stat 内核调用之外,和 file stat 命令一样,这意味着如果 name 是一个符号连接,那么这个命令返回的是这个符号连接的信息 而不是这个符号连接指向的文件的信息。读 fileId 标识的文件的下一行,忽略换行符。
数字IC设计学习笔记_静态时序分析STA_TCL脚本
GloriaHuo's Blogs
03-11 1423
数字IC设计学习笔记 半周期路径Half Cycle Path 1. 伪路径False Paths 2. 如何处理False Paths 1. TCL置换分类 变量置换$: $ 后面为变量名。将置换成它的值。 命令置换[]:[]内是一个独立的tcl语句 反斜杠置换\:换行符,空格;[、$等被TCL解释器当作特殊符号对待的字符,加上反斜杠后变成普通字符。 用\t表示TAB 用\n表示换行符 “#” 表示注释。 “” TCL解释器对双引号中$和[]符号会进行变量置换和命令置换。 {} 而在花括号中,所有
TCL脚本学习资料——入门必看
11-02
TCL脚本运行环境 1. TCL解释器:如TCLsh,是内置了TCL命令的解释器,可以直接执行TCL脚本。 2. TCL/Tk:TCL的图形化扩展,提供了一系列创建GUI的命令,如`button`, `label`, `entry`等。 三、TCL的字符串操作 1...
TCL基础教程——(2)输出和变量.pdf
11-21
然而,要创建一个独立的TCL程序,你需要将代码写入一个文件,比如`Helloworld.tcl`,并在文件的第一行添加shebang行(`#!/usr/bin/tclsh`),指定TCL解释器的位置。然后,通过`chmod +x`命令赋予脚本执行权限,并...
shell-perl-python等脚本文件加密工具
10-30
"shell-perl-python等脚本文件加密工具"这个主题就涉及到这样一个工具——shc。 shc(Shell Script Compiler)是一款开源工具,它能够将Shell脚本转换成进制可执行文件,从而达到加密和保护脚本源码的目的。shc的...
Tcl Scripting Language Components-开源
04-26
本文将重点介绍一个针对Delphi集成环境的Tcl组件——Tslc。Tslc允许开发者在Delphi项目中无缝集成Tcl脚本语言,极大地拓展了Delphi应用程序的功能,并提供了丰富的可视化工具来增强开发体验。 1. **拖放和双击命令...
(82)TCL脚本命令【写文件
m0_46498597的博客
02-15 821
Tcl 语言的全称 Tool Command Language,即工具命令语言。这种需要在 EDA 工具中使用的相当之多,或者说几乎每个 EDA 工具都支持 Tcl 语言。所以对于 IC 专业的来说,学习Tcl也是很重要很必要的。静态时序分析中多用的 Synopsys Tcl 语言,主要服务于 IC设计,其他的FPGA厂商比如 Xilinx的 .ucf文件 .xdc文件也都是 Tcl 语言编写,这与 Synopsys 半导体公司的 Tcl 语言基本相同。
第10章Tcl脚本编程()
weixin_43816759的博客
06-30 3989
TCL基础知识
TCL脚本语言学习
qq_42135020的博客
11-24 9866
tcl语言入门,变量列表、正则表达式等
tcl中的文件句柄是什么
05-30
Tcl中,文件句柄是一种用于表示打开的文件的抽象数据类型。文件句柄用于标识文件在内部的存储位置,以便读取、写入或关闭文件Tcl中的文件句柄是一种特殊的变量,可以使用open命令打开文件并返回一个文件句柄,语法如下: ``` set file_handle [open $filename $mode] ``` 这里,$filename是要打开的文件名,$mode是打开文件的模式,包括r(只读)、w(只写)、a(追加)等。open命令返回一个文件句柄,可以使用这个文件句柄来读取、写入或关闭文件。 在打开文件后,可以使用gets命令逐行读取文件内容,使用puts命令将内容写入到文件中,使用close命令关闭文件句柄。例如: ```tcl set file_handle [open $filename r] while {[gets $file_handle line] >= 0} { # 处理每一行的内容 puts "读取的行:$line" } close $file_handle ``` 这个例子中,使用open命令打开一个只读文件,返回一个文件句柄。然后使用while循环逐行读取文件内容,并对每一行做相应的处理。最后使用close命令关闭文件句柄。 文件句柄在Tcl中还用于处理其他类型的输入和输出,例如网络套接字、命名管道等。文件句柄是Tcl中重要的概念之一,掌握好文件句柄的使用可以帮助我们更好地处理文件和其他类型的输入和输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Tcl——访问文件(二) 8127
  • TCL 语言的数据结构——字典 4486
  • TCL——访问文件(一) 4232
  • 学习 TCL 语言流程控制这一篇就够了 3075
  • TCL 语言的过程 proc 2879

分类专栏

  • 杂言碎语 1篇
  • TCL语言 10篇
  • Vim 1篇
  • 数字IC后端

最新评论

  • (2, ‘系统找不到指定的文件。‘, None, 2, None)setuptools-65.5.1-pyhd8ed1ab_0

    weixin_48972433: 执行完conda env create f environment.yml指令出现报错usage: conda-env [-h] {attach,create,export,list,remove,upload,update} ... conda-env: error: unrecognized arguments: environment.yml是为什么?

  • (2, ‘系统找不到指定的文件。‘, None, 2, None)setuptools-65.5.1-pyhd8ed1ab_0

    m0_49691379: 怎么配置yml文件呀?在哪儿创建?

  • 零基础入门TCL语言(二)

    初中没毕业(真的): 老大,说下怎么调试呀

  • (2, ‘系统找不到指定的文件。‘, None, 2, None)setuptools-65.5.1-pyhd8ed1ab_0

    *Sally Enid*: 为什么后面安装pytorch安装不上呀?

  • TCL 语言中——变量的作用域

    hhdejuice: 对照鲜明,通俗易懂表情包

大家在看

  • 新文件覆盖旧文件还能复原吗?八大excel文档修复软件免费
  • Java中InputStreamReader和FileReader之间的一些区别
  • Python面试题:Python中的迭代器与生成器:工作原理与实战案例
  • Blasticidin(杀稻瘟菌素):bsr或BSD基因筛选抗生素
  • 坚持日更的意义何在? 485

最新文章

  • 用 cursor 写代码,真的爽死了
  • 学一门编程语言,学到什么程度才算 OK ?
  • Tcl 进阶之路,编程题(1)—— Acronym
2024年7篇
2023年18篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码吉祥英文网站建设西乡seo排名松岗模板制作深圳关键词排名大运优秀网站设计布吉外贸网站设计惠州SEO按天计费南山网站定制平湖关键词按天计费平湖英文网站建设大芬建设网站丹竹头标王丹竹头至尊标王福田营销型网站建设龙岗网站制作沙井关键词排名包年推广大芬网站推广民治百度网站优化排名石岩seo网站优化沙井百度竞价包年推广龙岗设计公司网站爱联网站改版坪山企业网站改版宝安外贸网站建设民治网站优化按天扣费吉祥外贸网站建设沙井企业网站制作吉祥网站优化按天扣费坪山关键词按天收费大浪推广网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化