我已经传递了一个csv文件,这只是一段数字,其间有逗号
e.g。
1,2,3,4,5,6-
等
逗号后面没有crlf,所以我无法将其导入excel或数据库以进一步处理。
有没有人知道如何使用批处理文件或VBA处理此文件以在每个逗号后插入crlf?
谢谢, 史蒂夫
答案 0 :(得分:2)
如果您有权访问VBA,请编写一个查找和替换函数,该函数从一个文件读取并写入另一个文件。通常,我会使用FileSystemObject,但在受控环境中始终不可用。
Public Sub ReplaceInFile(sOld As String, sNew As String, _
sFind As String, sReplace As String)
'-----------------------------------------------------
' Procedure : ReplaceInFile
' Author : cmsjr
' Date : 9/15/2009
' Purpose : Make up for lack of text manipulation in windows shell
' Sample
' Call ReplaceInFile("C:\DelimisFun.txt", "c:\NewFile2.txt", ",", "," & vbCrLf)
' Parms :
' sOld is the file you want to change
' sNew is the new file, should not be the same as the old ;)
' sFind what you are looking for
' sReplace, what you would like to see instead
'
'------------------------------------------------------------
'
On Error GoTo Error_Proc
Dim lin, lout As Integer 'file handles
Dim strBuff As String 'buffer
If Dir(sOld) = "" Then 'can't read what's not there
MsgBox "Invalid File"
Else
lin = FreeFile
Open sOld For Input As #lin 'open input
lout = FreeFile
Open sNew For Append As #lout 'open output
Do Until EOF(lin) 'loop through file
Line Input #lin, strBuff 'read the old
Write #lout, Replace(strBuff, sFind, sReplace) 'write the new
Loop
End If
Exit_Proc:
Close #lin
Close #lout
Exit Sub
Error_Proc:
MsgBox Err.Description, vbOKOnly
Resume Exit_Proc
End Sub
超级恶魔糟糕的蝙蝠文件方法
但是如果我们没有VBA或任何* nix风格的工具呢?这是一个不可取的方式
创建一个bat文件,它将循环显示命令行参数并将它们回显到硬编码文件。注意使用shift,这个将下一个命令行参数向下移动一个索引($ 2值现在在2美元等),这对我们有效,因为bat文件将忽略命令行参数中的逗号(每个对于循环手册页),注意我们也替换了逗号,因为它被忽略了。我没有在大型数据集上测试它,它适用于2000行。
@ECHO OFF :环 如果“%1”==“”GOTO继续
echo %1, >> NewFile.txt
SHIFT GOTO循环 :继续
在for循环中包含对bat文件的调用,因此我们基本上将文本文件中的每个逗号分隔值作为命令行参数传递给bat文件。
for / F%x in(delimisfun.txt)do c:\ bats \ winreplace.bat%x
答案 1 :(得分:0)
你可以用notepad2 ......
之类的东西来做ctrl + H - >将“,”替换为“,\ r \ n”并勾选“转换反斜杠”
答案 2 :(得分:0)
您可以使用linux或cygwin实用程序tr
cat FILENAME | tr , '\n'
答案 3 :(得分:0)
你也可以使用sed:
sed 's/,/,\r\n/g' FILENAME
(您也可以在文件中使用-i选项进行就地替换)
答案 4 :(得分:0)
<强> SPlitCSV.cmd 强>
@echo off
对于/ f“tokens = *”%% A在(%1)中调用:ProcessLine %% A
转到:eof
:ProcessLine从
echo %1
shift
if [%1]==[] goto :eof
goto :ProcessLine
转到:eof
<强> Test.CVS 强> 1,2,3,4,5
SplitCSV.cmd Test.csv
1 2 3 4 5