TF:AutoHotkey 的文本文件和字符串库 [lib] - v3.8

 

文本(文件)的“瑞士军刀”库

介绍

 

顾名思义,这是一个 AutoHotkey (AHK) 库,具有许多用于“操作”文本的函数,包括 *.txt、*.ahk、*.html、*.css 等文件和字符串(或变量)。例如,您可以删除特定行、替换单词或特定行、对行进行编号、删除或插入文本列等。有关完整概述,请参阅下面的函数列表。

它对于二进制文件或数据(例如 MS Office 文件、PDF、可执行文件、图像等)没有用。(提示:在 AHK 论坛中搜索“binread”以查找有关如何读取、写入和“编辑”二进制文件的一些指示。 )

功能

 

  1. TF
  2. TF_保存
  3. TF_CountLines
  4. TF_计数*1
  5. TF_读取行
  6. TF_尾部
  7. TF_替换
  8. TF_ReplaceInLines
  9. TF_RegEx替换
  10. TF_RegExReplaceInLines
  11. TF_删除线
  12. TF_RemoveBlankLines
  13. TF_RemoveDuplicateLines
  14. TF_插入行
  15. TF_替换行
  16. TF_InsertPrefix
  17. TF_插入后缀
  18. TF_TrimLeft
  19. TF_TrimRight
  20. TF_左对齐
  21. TF_居中对齐
  22. TF_右对齐
  23. TF_行号
  24. TF_ConCat
  25. TF_ColGet
  26. TF_ColPut
  27. TF_ColCut
  28. TF_反向线
  29. TF_Find(可用作基本 grep)
  30. TF_SplitFileByLines
  31. TF_按文本分割文件
  32. TF_合并*2
  33. TF_Prepend *2
  34. TF_追加*2
  35. TF_Wrap
  36. TF_空白
  37. TF_Subtract
  38. TF_范围替换
  39. TF_MakeFile
  40. TF_Tab2空格
  41. TF_Spaces2Tab
  42. TF_排序
  43. TF_加入

笔记

  1. TF_Count 不支持文件,仅适用于变量。
  2. 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) 语法
搜索文本 要查找的文本(查找/替换功能)
替换文本 要替换的文本(查找/替换功能)

笔记

  1. 很多函数还有具体的参数,请参见下面各个函数的说明。
  2. 备份文件:如果 TextFile 目录中存在子目录“backup”,则在使用 BAK 扩展名覆盖原始文件(file.txt 和 file_copy.txt)之前进行备份
  3. 您可以在“示例脚本”中找到大多数函数的示例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

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。