如何在没有crlf的csv文件中插入逗号之后插入CRLF?

时间:2009-09-15 15:36:25

标签: batch-file

我已经传递了一个csv文件,这只是一段数字,其间有逗号

e.g。

1,2,3,4,5,6-

逗号后面没有crlf,所以我无法将其导入excel或数据库以进一步处理。

有没有人知道如何使用批处理文件或VBA处理此文件以在每个逗号后插入crlf?

谢谢, 史蒂夫

5 个答案:

答案 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风格的工具呢?这是一个不可取的方式

  1. 创建一个bat文件,它将循环显示命令行参数并将它们回显到硬编码文件。注意使用shift,这个下一个命令行参数向下移动一个索引($ 2值现在在2美元等),这对我们有效,因为bat文件将忽略命令行参数中的逗号(每个对于循环手册页),注意我们也替换了逗号,因为它被忽略了。我没有在大型数据集上测试它,它适用于2000行。

    @ECHO OFF :环 如果“%1”==“”GOTO继续

    echo %1, >> NewFile.txt
    

    SHIFT GOTO循环 :继续

  2. 在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