RegEx para remover CRLF da exportação CSV do Excel

0

Eu exportei um arquivo do Excel para CSV e tenho várias linhas dentro dele. Eu marquei o início de cada linha com *** e o final com ###.

*** some
text within
my cell to
export ###

Alguém poderia me ajudar com alguma expressão RexEx para remover o CRLF desse arquivo de texto para obtê-lo como

*** some text within my cell to export ###
    
por Stef 05.06.2012 / 11:47

4 respostas

2

Fiz isso com uma macro:

Dim pobjCell As Range
Dim plCharCounter As Long
Dim psCellText As String



For Each pobjCell In Selection
psCellText = pobjCell.Text
Do While InStr(psCellText, vbLf) > 0
psCellText = Replace$(psCellText, vbLf, " ")
Loop
pobjCell.Value = psCellText
Next
    
por 31.07.2012 / 16:59
1
s/[\n\r ]+/ /g

Isso substituirá globalmente quaisquer espaços, retornos de carro e novas linhas) [\n\r ]+ por um espaço ( ).

s/\*\*\(*.*)[\n\r ]+(.*)###/$1 $2/g

Esta é uma versão do anterior que suspeita que sua sentença começa com *** e termina com ### .

s/^\*\*\*(.*)[\n\r ]+(.*)###$/$1 $2/g

Esta é uma versão do anterior que também garante que *** comece no início de uma linha e que ### termine no final da linha. Um deles deve corresponder ao que você deseja.

s/MATCH/REPLACE/OPTIONS

é a sintaxe sed , você pode querer ter apenas /MATCH/OPTIONS ou MATCH e substituí-la por REPLACE . Depende de como você está planejando usar a expressão regular. Eu acredito que o do meio funcionaria melhor, dada a sua descrição.

    
por 10.06.2012 / 22:09
0

não tenho idéia se alguma implementação real de regex suporta lookbehind de tamanho variável, mas em teoria a regex ficaria assim (o segundo argumento de uma função replace seria um espaço):

(?<=\*\*\*[^#]*)\n(?=[^#]*###)

na prática, os analisadores csv diferenciam entre novas linhas dentro de strings (entre aspas duplas) e novas linhas entre linhas, então isso não deve ser um problema ...

no entanto, é possível marcar as extremidades das linhas com uma sequência de caracteres especial (por exemplo, "@@@"), substituir todas as novas linhas \n pelos espaços e substituir @@@ pelas novas linhas \n ...

    
por 06.06.2012 / 10:44
0

Que tal um VBS que recebe a entrada de um arquivo CSV e gera o arquivo, mas com linhas iniciando em *** e terminando em ### juntas?

Option Explicit
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
Dim bStripNewline, sOutput, sLine : bStripNewline = False
If WScript.Arguments.Count = 0 Then
    WScript.Echo "Usage: " & WScript.ScriptName & " <file>"
    WScript.Quit
End If
Dim oFile : Set oFile = fso.OpenTextFile(Wscript.Arguments(0), 1)
Do Until oFile.AtEndOfStream
    sLine = oFile.ReadLine
    If Left(sLine, 3) = "***" Then
        bStripNewLine = True
        sLine = Mid(sLine, 4, Len(sLine))
    ElseIf Right(sLine, 3) = "###" and bStripNewLine = True Then
        bStripNewline = False
        sLine = Left(sLine, Len(sLine)-3)
    End If
    sOutput = sOutput & sLine
    If bStripNewline = False Then sOutput = sOutput & VbCrLf
Loop
oFile.Close
Set fso = Nothing
WScript.Echo sOutput

Salve-o em um arquivo e execute-o a partir da linha de comando da seguinte maneira:

cscript //NOLOGO nameofscript.vbs <name of csv file> > <new file>

Exemplo de arquivo de entrada:

the quick brown
*** some
text within
my cell to
export ###
fox jumps
***over
the 
lazy###
dog
one two three

Produz a seguinte saída:

the quick brown
 sometext withinmy cell toexport 
fox jumps
overthe lazy
dog
one two three
    
por 10.06.2012 / 22:02