TF:AutoHotkey 的文本文件和字符串库 [lib] - v3.8
文本(文件)的“瑞士军刀”库
介绍
顾名思义,这是一个 AutoHotkey (AHK) 库,具有许多用于“操作”文本的函数,包括 *.txt、*.ahk、*.html、*.css 等文件和字符串(或变量)。例如,您可以删除特定行、替换单词或特定行、对行进行编号、删除或插入文本列等。有关完整概述,请参阅下面的函数列表。
它对于二进制文件或数据(例如 MS Office 文件、PDF、可执行文件、图像等)没有用。(提示:在 AHK 论坛中搜索“binread”以查找有关如何读取、写入和“编辑”二进制文件的一些指示。 )
功能
- TF
- TF_保存
- TF_CountLines
- TF_计数*1
- TF_读取行
- TF_尾部
- TF_替换
- TF_ReplaceInLines
- TF_RegEx替换
- TF_RegExReplaceInLines
- TF_删除线
- TF_RemoveBlankLines
- TF_RemoveDuplicateLines
- TF_插入行
- TF_替换行
- TF_InsertPrefix
- TF_插入后缀
- TF_TrimLeft
- TF_TrimRight
- TF_左对齐
- TF_居中对齐
- TF_右对齐
- TF_行号
- TF_ConCat
- TF_ColGet
- TF_ColPut
- TF_ColCut
- TF_反向线
- TF_Find(可用作基本 grep)
- TF_SplitFileByLines
- TF_按文本分割文件
- TF_合并*2
- TF_Prepend *2
- TF_追加*2
- TF_Wrap
- TF_空白
- TF_Subtract
- TF_范围替换
- TF_MakeFile
- TF_Tab2空格
- TF_Spaces2Tab
- TF_排序
- TF_加入
笔记
- TF_Count 不支持文件,仅适用于变量。
- TF_Merge、TF_Prepend、TF_Append 目前不支持变量,仅适用于 FILES。
概念
在开始使用 TF 库之前,了解一些基本概念非常重要:
- 如果将文件传递给 TF 函数,输出通常是一个文件(有一些例外)。默认情况下,它将输出写入输入文件的副本,使原始输入文件保持不变。
- 您可以使用 ! 覆盖输入文件。作为前缀。有关更多详细信息,请参阅下面的“参数快速介绍”和“文本文件和 ! 前缀”。
- 如果将变量传递给 TF 函数,则返回的输出也将是变量。
- 大多数 TF 函数允许您处理特定的行或行的部分。
- TF “知道”某物是文件还是变量,即使传递给 TF 的变量旨在表示文件。(对于那些感兴趣的人来说,这是在辅助函数 TF_GetData 中完成的)。
要了解如何使用文件和变量,请阅读下面的“文本文件和 ! 前缀”和“文件和变量”部分。
文件编码、代码页
如果您遇到 TF 正在更改文件编码(代码页),请尝试使用以下 AutoHotkey 命令在脚本顶部(或至少在调用 TF 函数之前)设置正确的文件编码: http://ahkscript.org/文档/命令/FileEncoding.htm
请注意,即使文件包含 BOM,也无法 100% 准确地确定文件编码。请参阅 AutoHotkey 论坛上关于此主题和可能有用的附加功能的讨论http://www.autohotkey.com/board/topic/95986-filegetencoding-filegetformat/ (这些函数的结果只是假设 UTF-8 的最佳猜测当 BOM - https://en.wikipedia.org/wiki/Byte_Order_Mark - 缺失时更常见)。
如何“安装”/使用
您可以将 TF.ahk 放在 LIB 目录中(请参阅http://ahkscript.org/docs/Functions.htm#lib)或使用 #include (请参阅http://ahkscript.org/docs/commands/_Include.htm)
您可以在“示例脚本”中找到大多数函数的示例 http://www.autohotkey.com/forum/viewtopic.php?p=280363#280363
注意:因为大多数这些函数都是逐行操作的,所以与可以同时操作整个文件或变量的函数或脚本相比,它们会慢一些。如果您需要处理许多文件/变量或非常大的文件/变量以防速度成为问题,请记住这一点。
参数快速介绍
几乎所有函数都接受以下基本参数:
范围 | 意义 |
文本 | 读取和保存到的文件名(可能包括(绝对)路径)(对于写入输出文件的所有函数)。 注意:默认情况下将创建 filename_copy,请使用 ! 如果您想覆盖 TextFile(例如源文件),请使用前缀 从 v3 开始,“Text”也可以是变量或直接传递给函数的文本。 请参阅文本文件和 ! 字首。 |
!字首 | 如果文本以 !(例如:"!c:\sample.txt")将覆盖文本文件,否则将把新文件保存为文本文件的副本,例如:Filename_copy.txt(所有函数,除了读取函数,因为没有输出文件) 提示:可以使用连接符添加 !,例如 "!" . "Filename.txt",请参阅 AHK 线程中的示例。 注意:如果 Text 是一个变量,它可以以 ! 开头,因为 TF 会自动检测到它不是文件,因此不会创建文件,而是返回更改后的变量。 See Textfile and the ! Prefix. |
Lines | 要读取的行数 |
StartLine | 范围开始(几乎所有)。 See (StartLine, Endline) Syntax. |
EndLine | 范围结束(几乎全部)。 请参阅(StartLine, Endline) 语法。 |
搜索文本 | 要查找的文本(查找/替换功能) |
替换文本 | 要替换的文本(查找/替换功能) |
笔记
- 很多函数还有具体的参数,请参见下面各个函数的说明。
- 备份文件:如果 TextFile 目录中存在子目录“backup”,则在使用 BAK 扩展名覆盖原始文件(file.txt 和 file_copy.txt)之前进行备份
- 您可以在“示例脚本”中找到大多数函数的示例http://www.autohotkey.com/forum/viewtopic.php?p=280363#280363
GitHub地址:https://github.com/hi5/TF
示例代码片段:
; 更详细全面的,请看官网介绍:https://github.com/hi5/TF #Include %A_ScriptDir%/tf.ahk SetWorkingDir %A_ScriptDir% TestFile= ; 创建演示用的变量文件 (join`r`n 1 Hi this 2 a test variable 3 to demonstrate 4 how to 5 use this 6 new version 7 of TF.AHK ) FileDelete, TestFile.txt FileAppend, %TestFile%, TestFile.txt ; 创建文件 F=TestFile.txt ; 只是TextFile.txt的简写代码,所以当 ; 我们在下面使用'F',我们仍然在传递一个文本文件,而不是一个变量! ; 传递给文件,读取第5行至文件末尾。 MsgBox % "From File 1:`n" TF_ReadLines("TestFile.txt",5) MsgBox % "From File 2:`n" TF_ReadLines(F,5) ; 【返回效果与上相同】 ; 传递变量,阅读第1至5行 MsgBox % "From Variable 1:`n" TF_ReadLines(TestFile,"1-5") MsgBox % "From Variable 2:`n" TF_ReadLines("Hi`nthis`nis`na`ntest`nvariable`nfor`ntesting",1,3) ; 把字符串 ; Examples using TF(): (如果你想使用变量,它将为你节省一个FileRead。) TF("TestFile.txt") ; 读取文件,创建全局变量t t:=TF_ReadLines(t,5) ; 传递由TF()创建的全局变量t,读取文件的第5行至结尾,将结果分配给t。 MsgBox % "TF(), example 1:`n" t TF("TestFile.txt", "MyVar") ; 读取文件,创建全局变量MyVar 【返回效果与上相同】 MyVar:=TF_ReadLines(MyVar,5) ; 传递由TF()创建的全局变量MyVar,读取文件的第5行至结尾,将结果分配给MyVar MsgBox % "TF(), example 2:`n" MyVar ; 注意我们如何在这里使用TF() 【返回效果与上相同】 t:=TF_ReadLines(TF("TestFile.txt"),5) ; 传递由TF()创建的全局变量t,读取文件的第5行至结尾,将结果分配给t。 MsgBox % "TF(), example 3:`n" t MyVar:=TF_ReadLines(TF("TestFile.txt","MyVar"),5) ; 传递由TF()创建的全局变量 【返回效果与上相同】 MsgBox % "TF(), example 4:`n" MyVar t:=TF_ReadLines(TF(F),5) ; 传递由TF()创建的全局变量t,读取文件的第5行至结尾,将结果分配给t。 t:=TF_ReverseLines(t,5) ; 传递由TF()创建的全局变量t,反转行,将结果分配给t 【返回效果与上相同】 MsgBox % "TF(), example 5:`n" t ; 直接与剪贴板或其他变量一起工作 Clipboard=Line 1`nLine 2`nLine 3`nLine 4`nLine 5`nLine 6`nLine 7`nLine 8 Clipboard:=TF_RemoveLines(Clipboard, 3, 6) ; 删除第3至6行 MsgBox % "Clipboard, example 6:`n" Clipboard
评论(0)