2012-01-24 2 views
2

정규식을 아는 사람은 매우 사소합니다.VBA RegEx : XML 파일의 데이터 필드에서 줄 바꿈 제거

필자는 가져올 XML 파일이 여러 개 있지만 필드 중 일부는 원래 사용자가 입력했기 때문에 데이터 내에 줄 바꿈을 포함 할 수 있습니다. 내가 가져올 데이터베이스가 Access이기 때문에 VBA를 사용하고 있으므로 즉시 편리합니다. XML에서

샘플 라인 :;하지만 또한 잡은 모든 라인은 각 XML의 끝에서 반환

<dbXML comments="This is line 1. 
This is line 2." /> 

나는 대체 및 수출 라인과 함께 반환 교체, 정기 무차별 가져 오기를 시도 선. 어느 쪽이 나빴어.

나는이 사이트에서 RegEx에 대한 참조 문서를 열어서 그들이 말하는 것을 알아낼 수는 있지만 RegEx를 읽는 것으로부터 점프를 작성할 수는 없습니다.

나는이 문제에 대한 다음과 같은 정의를 제공 할 수 있습니다 :

  • 나는로 교체 할 수있는 유일한 라인 반환합니다; 모두 < 사이>와 ""
  • 는 ""가 <>
  • 내에서 항상 것은 그래서 ...... "..... \ n을 ...."< 같이 보입니다 .. 어떤 도움을 사전에

    <dbXML comments="This is line 1.;This is line 2." /> 
    

    감사합니다 ..> 나는 상단에 준 예를 들어

, 나는 그것이처럼 살고 싶지.

+0

XML 파일을 읽거나 구문 분석 할 때 줄 바꿈을 제거 할 수 없습니까? 먼저 주석 태그의 텍스트를 가져온 다음 필요에 따라 줄 바꿈을 제거하십시오. –

+0

Access 테이블에서 대량 가져 오기를 시도하고 있으며 줄 바꿈으로 인해 테이블이 손상됩니다. 내 앞에있는 사람은 그가 제거한 스크립트를 가지고 있었지만 더 이상 내 컴퓨터에서 작동하지 않습니다 (업그레이드로 인해 시대에 뒤진 것으로 생각됩니다). 그래서 대체품을 만들려고합니다. –

답변

0

저는 약간 구식이어서 RegEx없이 이것을 할 것입니다.

Dim xmlString As String 
Dim thisChar As String 
Dim i As Long 
Dim insideTag As Boolean 

' Make an example xml string 
xmlString = "<dbXML comments=""This is line 1." _ 
    & vbCrLf & "This is line 2."" />" 
xmlString = xmlString & vbCrLf & xmlString 

Debug.Print "Before:" 
Debug.Print xmlString 

insideTag = False 'Assume we are NOT inside a tag to start with. 
For i = 1 To Len(xmlString) 'March through the string char by char 
    thisChar = Mid(xmlString, i, 1) 
    If Not insideTag Then 
     If thisChar = "<" Then 
      'We're entering a tag. 
      insideTag = True 
     Else 
      'Do nothing. Leave line breaks alone. 
     End If 
    Else 
     'We're inside a tag. 
     If thisChar = ">" Then 
      'We've reached the end of this tag 
      insideTag = False 
     ElseIf thisChar = vbCr Or thisChar = vbLf Then 
      'Remove line breaks. 
      Mid(xmlString, i, 1) = ";" 
     End If 
    End If 
Next i 

Debug.Print "After:" 
Debug.Print xmlString 

동일한 주제를보다 간결하게 처리 할 RegEx가있을 것입니다. 그러나 위의 코드를 작성하는 데 2 ​​분이 걸렸을 때와 비교해 보면 나이가 들었다.

+0

촬영. 마감일에 프로젝트를 완성하려고 노력 중이고 예술 작품을 작곡하지 않습니다. ;) 나는 어떤 작품이라도 사용할 것이다. 이것을 연결하고 파일 조작 명령을 추가하겠습니다. 모든 것이 작동하면 다시 돌아와 수표를 클릭하겠습니다. 도와 주셔서 감사합니다! –

+0

코드가 작동합니다. 데이터가 아직 가져 오지 않아서, 분명히 * 의심되는 것보다 더 많은 문제가 있습니다. (중얼 거림, 불평) 다시 도움을 주셔서 감사합니다! –

관련 문제