为了简洁起见,我有一个文本文件(在Windows中),如下所示:
Blah Blah Blah Blah
Blah Blah Blah 2016
START-OF-FILE
ABC
ABCDE Blah Blah Blah
Blah Blah Blah Blah
Blah Blah Blah Blah Blah Blah
END-OF-FILE
Blah Blah Blah
Blah Blah Blah
我只想要START-OF-FILE和END-OF-FILE
之间的文本ABC
ABCDE Blah Blah Blah
Blah Blah Blah Blah
Blah Blah Blah Blah Blah Blah
我尝试使用Findstr,但效果不佳。有人可以帮忙吗?
这是我到目前为止所做的:
@echo off
setlocal enabledelayedexpansion
set quote=
for /f "tokens=*" %%a in (infile.txt) do (
set str=%%a
set str=!str:"=:!
if not "!str!"=="!str::=!" (
if defined quote (
set quote=
for %%b in (^"%%a) do set str=%%~b
if not "!str!"==START-OF-FILE if not "!str: =!"==END-OF-FILE echo !str! >> outfile.txt
) else (
set quote=1
for %%b in (%%a^") do set str=%%~b
)
)
if defined quote (
if not "!str!"==START-OF-FILE if not "!str: =!"==END-OF-FILE echo !str! >> outfile.txt
)
)
这就是结果:
2016"
START-OF-FILE
ABC
ABCDE Blah Blah Blah
Blah Blah Blah Blah
Blah Blah Blah Blah Blah Blah
END-OF-FILE
Blah Blah Blah
我需要2016年" ,文件开头,文件结束和文件结束后(Blah Blah Blah)不包括在内
答案 0 :(得分:2)
@echo off
setlocal EnableDelayedExpansion
set "skip="
for /F "delims=:" %%a in ('findstr /N "START-OF-FILE END-OF-FILE" input.txt') do (
if not defined skip (
set "skip=%%a"
) else (
set /A "lines=%%a-skip-1"
)
)
(for /F "skip=%skip% delims=" %%a in (input.txt) do (
echo %%a
set /A lines-=1
if !lines! equ 0 goto break
)) > output.txt
:break
答案 1 :(得分:1)
emcc --shell-file <path>
您需要更改@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q36416492.txt"
SET "outfile=%destdir%\outfile.txt"
SET "output="
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
IF "%%a"=="END-OF-FILE" SET "output="
IF DEFINED output ECHO(%%a
IF "%%a"=="START-OF-FILE" SET "output=Y"
)
)>"%outfile%"
GOTO :EOF
和sourcedir
的设置以适合您的具体情况。
我使用了一个名为destdir
的文件,其中包含我的测试数据。
生成定义为%outfile%
的文件使用q36416492.txt
解释变量的运行时值的事实。
读取文件的每一行,如果ON-触发字符串匹配,则将if defined
设置为一个值,并清除OFF-触发字符串。如果定义了标志output
,则仅对该行进行反刍。
答案 2 :(得分:0)
您可以使用
String result = "";
boolean withinBounds = false;
for (int i = 0; i < lines.length; i++) {
if (lines[i].equals("START-OF-FILE")) {
withinBounds = true;
}
if (lines[i].equals("END-OF-FILE")) {
withinBounds = false;
}
if (withinBounds) {
//do whatever you want to do with the lines between your tags here
result = result + lines[i] + "\n";
}
}
将文件的所有行作为数组。从那里可以很容易地遍历它们并找到你想要的那些。
import fs from 'fs'
myFunc = function(){
fs.readFile('input.txt', function(err, data){
if(err)
console.log("Error" + err)
console.log("Data from input" + data)
})
}
请注意,这是未经测试的,但一般概念绝对适用于您。请注意,它还假设您的标签本身就是一行。
答案 3 :(得分:0)
使用Windows Powershell
如果您知道起点和终点,这将是一个两步过程。第一行切断顶部,第二行切断底部。
获取内容 file.txt |选择-last n &gt; output.txt
获取内容 output.txt | select -first n &gt; output2.txt
如果您不知道起点和终点在哪里,则需要两次额外的步骤......
输入 file.txt | select-string -pattern &#34; START_OF_FILE&#34; | Select-Object LineNumber
输入 file.txt | select-string -pattern &#34; END_OF_FILE&#34; | Select-Object LineNumber