1

我知道这可以通过 SQL Server 轻松完成,但有趣的是我的工作没有让我访问 SQL Server,所以我不知道除了通过批处理文件之外还能如何做到这一点,或者甚至可能吗?

我有一个生成的报告中的平面文件,没有行分隔符,所以它只是一堆 1024 个字符的行。我的目标是找到每个出现的单词“T/C”,然后读取 480 个字符,然后循环直到到达文件末尾。我现在能想到的最好的就是这个,我对批处理文件一无所知:

  for /f "tokens=*" %%a in (sample.txt) do (
  set line=%%a
  set chars=!line:~0,480!
  echo !chars! --- !line!
  )> text.txt 
4

1 回答 1

0
@ECHO OFF
SETLOCAL
SET "prevline="
(
 FOR /f "delims=" %%a IN (q19992107.txt) DO (
  SET line=%%a
  CALL :check
 )
 SET "line="
 CALL :check
)>newfile.txt
TYPE newfile.txt
GOTO :EOF

:check
IF NOT DEFINED prevline GOTO done
SET aftertc=%prevline:*T/C=%
IF "%aftertc%"=="%prevline%" SET prevline=%prevline:~-2%%line%&GOTO :eof
SET bothline=%prevline%%line%
SET aftertc=%bothline:*T/C=%
SET aftertc=%aftertc:~0,15%
ECHO %aftertc%
:done
SET prevline=%line%
GOTO :eof

批处理不是一个理想的工具 - 但上面可能会奏效。

本质上,它保留两行,prevline并且line.
如果目标字符串不包含在上一行中,则将上一行的最后 2 个字符添加到当前行,并将结果用作上一行。

否则,将两条线连接起来,处理掉在 Then lop off the tail 之前的那个 pasrt T/C- 为了测试方便,我将尾部限制为 15 个字符。然后像以前一样使用当前行。

使用最后 2 个字符的原因是如果序列被拆分为多行,则包含上一行的Tor 。T/T/C

这是我使用的测试文件q19992107.txt

this is skipped
this contains T/C in line
no contents
skip this
this is irrelevant
split on / in T/
C was 1 split
this is irrelevant
split on / in T
/C was 2 split
there IS T/C
at the end of the previous line
and then there is T/C in the last

结果在newfile.txt

 in lineno cont
 was 1 splitthi
 was 2 splitthe
at the end of t
 in the last
于 2013-11-15T03:46:24.593 回答