我想从某些空格分隔的某些字符串创建CSV文本文件,但空间量未知。即:
fname lname Degree Test3
City experience
////////////////////////////////////////////////////////////////////////////////
fname2 lname2 Degree2 Test32
City2 experience2
////////////////////////////////////////////////////////////////////////////////
fname3 lname3 Degree3 Test33
City3 experience3
////////////////////////////////////////////////////////////////////////////////
我希望输出像
fname,lname,Degree,Test3,City,Experience
fname2,lname2,Degree2,Test32,City2,Experience2
fname3,lname3,Degree3,Test33,City,Experience3
请注意,使用的变量不是固定宽度,而是会发生变化。我该怎么做才能将所有不同的字符串变为实际变量?我能够在批处理中做一半工作但是:
BATCH1
SETLOCAL ENABLEDELAYEDEXPANSION
for /F "tokens=*" %%I in (C:\Users\bonhkarl01\Desktop\Test.txt) do (
set str=%%I
set str=!str: =,!
set str=!str: =,!
set str=!str: =!
echo.!str! >> "C:\Users\bonhkarl01\Desktop\Test2.txt"
)
findstr /v /b /c:"-----------------------------------------------------------------" C:\Users\bonhkarl01\Desktop\Test2.txt > C:\Users\bonhkarl01\Desktop\Test3.txt
Batch2
@echo off
setlocal enabledelayedexpansion
for /f %%a in (C:\Users\bonhkarl01\Desktop\Test3.txt) do (set "string=!string!%%a,")
set "string=%string:~0,-1%"
echo.%string%> "C:\Users\bonhkarl01\Desktop\Test4.txt"
pause
会给我以下输入:
fname,lname,Degree,Test3,City,experience,fname2,lname2,Degree2,Test32,City2,experience2,fname3,lname3,Degree3,Test33,City3,experience3
但批次中仍然知道宽度。
答案 0 :(得分:3)
你的问题有一个很大的问题,很遗憾,很常见:你没有描述你的问题,你只是展示了一些确实不代表的示例数据真实数据。当问题的规范不完整时,我们只能猜测缺少的信息,在这种情况下,OP回复频繁:“你的程序不适用于我的真实数据”。为了解决这个问题,我假设文件中的每组数据都由一个带有65个破折号的行分开(与您在示例代码中使用的相同)。这是我使用的数据文件:
fname lname Degree Test3
City experience
-----------------------------------------------------------------
fname2 lname2 Degree2 Test32
City2 experience2
-----------------------------------------------------------------
fname3 lname3 Degree3 Test33
City3 experience3
-----------------------------------------------------------------
这是解决问题的批处理代码:
@echo off
setlocal EnableDelayedExpansion
set "line="
(for /F "delims=" %%a in (Test.txt) do (
for %%b in (%%a) do (
if "%%b" equ "-----------------------------------------------------------------" (
echo !line:~1!
set "line="
) else (
set "line=!line!,%%b"
)
)
)) > output.txt
这是输出:
fname,lname,Degree,Test3,City,experience
fname2,lname2,Degree2,Test32,City2,experience2
fname3,lname3,Degree3,Test33,City3,experience3
答案 1 :(得分:0)
非常感谢您的回答!它会有效。我刚从提供商处获得了一个新文件......他改变了一切!这是输出:
(文件开始) 69
FirstName LastName
加蒂诺,QC(42公里)
Universitaire
2016-02-17
69
FirstName LastName
加蒂诺,QC(43公里)
Universitaire
2016年2月17日
(文件结束)
我能用VBScript来实现它。
For t = 0 to uBound(FileContentsAray)
If Len(FileContentsAray(t)) > 0 Then
LineCount = LineCount + 1
If LineCount = 2 Then
unnom = split(FileContentsAray(t)," ")
if uBound(unnom) > 1 Then
if ubound(unnom) = 4 Then
WriteInFile NewFile, unnom(0) & " " & unnom(1) & "," & unnom(2)& " " & unnom(3)
else
WriteInFile NewFile, unnom(0) & " " & unnom(1) & "," & unnom(2)
end if
else
if uBound(unnom) = 0 Then
WriteInFile NewFile, unnom(0)
else
WriteInFile NewFile, unnom(0) & "," & unnom(1)
end if
end if
End if
If LineCount = 5 Then LineCount = 0
End If
Next