我正在尝试自动化一个稍微费力的过程,该过程涉及使用几个免费软件运行计算化学计算。我已经设法找到了我需要做的大部分事情的答案,但我错过了最后一块拼图,可能是因为它很不寻常,而且我不知道我选择的语言是否可能 - 批处理文件. 我之所以选择这个,部分原因是我过去很难让 C++ 或 JavaScript 读取或编辑其他文件,而 Batch(这是朋友推荐的)第一次毫无困难地做到了。
我在下面复制了我的输入文件的代表性样本。
Text above
$DATA
Adenosine
C1 0
O 8.0 0.1319600000 7.8748100000 0.9316500000
DZV 0
C 6.0 -0.5337400000 7.9322600000 2.1608300000
DZV 0
N 7.0 1.4158500000 4.2659800000 1.3661200000
DZV 0
H 1.0 -0.4456400000 8.9556600000 2.5897400000
DZV 0
More coordinates below
我希望能够(例如)找到 string O 8.0
,并将下一行的内容替换为文本文件的内容。格式,
Atom atomic charge coordinates
text
blank space
需要保留 - 空白空间是必不可少的。
最终产品的示例如下(氧和碳;为简洁起见,省略了氮和氢):
$DATA
Adenosine
C1 0
O 8.0 0.1319600000 7.8748100000 0.9316500000
S 5
1 2266.1767785 -0.53431809926E-02
2 340.87010191 -0.39890039230E-01
3 77.363135167 -0.17853911985
4 21.479644940 -0.46427684959
5 6.6589433124 -0.44309745172
S 1
1 0.80975975668 1.0000000
S 1
1 0.25530772234 1.0000000
P 3
1 17.721504317 0.43394573193E-01
2 3.8635505440 0.23094120765
3 1.0480920883 0.51375311064
P 1
1 0.27641544411 1.0000000
D 1
1 1.2000000 1.0000000
C 6.0 -0.5337400000 7.9322600000 2.1608300000
S 5
1 1238.4016938 0.54568832082E-02
2 186.29004992 0.40638409211E-01
3 42.251176346 0.18025593888
4 11.676557932 0.46315121755
5 3.5930506482 0.44087173314
S 1
1 0.40245147363 1.0000000
S 1
1 0.13090182668 1.0000000
P 3
1 9.4680970621 0.38387871728E-01
2 2.0103545142 0.21117025112
3 0.54771004707 0.51328172114
P 1
1 0.15268613795 1.0000000
D 1
1 0.8000000 1.0000000
我已经成功地使用以下代码查找和替换字符串:
set "search=SearchItem"
set "replace=Replacement"
set "textfile=text.txt"
set "newfile=newfile.txt"
(for /f "delims=" %%i in (%textfile%) do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
))>"%newfile%"
del %textfile%
rename %newfile% %textfile%
我在这里找到了“在文件中查找一行并替换下一行”类型代码:在文件中查找一行并替换下一行 但这并不完全有效 - 代码似乎转向:
Atom atomic charge coordinates
text
blank space
进入:
blank space
replacement text
blank space
它只对一个原子执行此操作。