문자열에서 줄 바꿈을 제거하는 방법
문자열이 줄 바꿈으로 끝나는 경우 문자열에서 줄 바꿈을 제거합니다.
Sub linebreak(myString)
If Len(myString) <> 0 Then
If Right$(myString, 1) = vbCrLf Or Right$(myString, 1) = vbNewLine Then myString = Left$(myString, Len(myString) - 1)
End If
End Sub
요약
str = Replace(str, vbLf, "")
이 코드는 코드에서 모든 줄 바꿈을 제거합니다.
마지막 하나만 꺼내면 됩니다.
If Right(str, 1) = vbLf Then str = Left(str, Len(str) - 1)
당신이 OK를 시도한 방법입니다.
배경 정보
라인 피드 = ASCII, 폼 피드 = ASCII 및 캐리지 리턴 = ASCII. 여기서 PC는 (전기) 타자기에서 나온 것이라는 우리 모두가 알고 있는 것을 명확하게 알 수 있습니다.
vbLf
이라Chr (10)
커서가 한 줄 아래로 이동하는 것을 의미합니다(타자기: 롤러 회전).
vbCr
이라Chr (13)
커서가 처음으로 이동함을 의미합니다(타자기: 롤 뒤로 당김).
도스에서 줄 바꿈은 항상VBCrLf
또는Chr (13) & Chr (10)
VB의 텍스트 상자와 함께 파일에 저장됩니다.
반면에 Excel 셀에서 줄 바꿈은 단지VBLf
그러면 두 번째 라인이 첫 번째 위치에서 시작됩니다.vbCr
그러면 세포 하나를 더 깊게 만듭니다.
따라서 문자열을 읽고 가져오는 위치에 따라 다릅니다.모든 것을 제거하려면vbLf
(Chr(10)
및 ) 및vbCr
(Char(13)
문자열에서 다음과 같이 수행할 수 있습니다.
strText = Replace(Replace(strText, Chr(10), ""), Chr(13), "")
마지막 하나만 제거하려는 경우 다음과 같이 테스트할 수 있습니다.
If Right(str, 1) = vbLf or Right(str, 1) = vbCr Then str = Left(str, Len(str) - 1)
vbCrLf
그리고.vbNewLine
는 두 이므로 제로두 문자길므로로변이다경니합이실로변다▁to니▁are경합▁so로,로 변경합니다.Right$(myString, 2)
Sub linebreak(myString)
If Len(myString) <> 0 Then
If Right$(myString, 2) = vbCrLf Or Right$(myString, 2) = vbNewLine Then
myString = Left$(myString, Len(myString) - 2)
End If
End If
End Sub
다음 행을 사용해 보십시오.
CleanString = Application.WorksheetFunction.Clean(MyString)
Excel을 사용하는 경우 VBA가 필요하지 않으므로 기본 제공되는 "Clean()" 기능을 사용하면 캐리지 리턴, 라인 피드 등을 제거할 수 있습니다.
=Clean(MyString)
VBA에서 클린 기능을 호출할 수 있는 방법은 다음과 같습니다.
Range("A1").Value = Application.WorksheetFunction.Clean(Range("A1"))
그러나 여기에 기록된 것처럼 CLEAN 기능은 7비트 ASCII 코드(값 0 ~ 31)에서 인쇄되지 않는 처음 32개 문자를 텍스트에서 제거하도록 설계되었습니다.유니코드 문자 집합에는 인쇄되지 않는 문자(값 127, 129, 141, 143, 144 및 157)가 추가로 있습니다.Clean 기능 자체로는 이러한 추가 비인쇄 문자를 제거하지 않습니다.
Rick Rothstein은 이러한 상황을 처리하기 위한 코드를 작성했습니다.
Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
Dim X As Long, CodesToClean As Variant
CodesToClean = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, _
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 129, 141, 143, 144, 157)
If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
For X = LBound(CodesToClean) To UBound(CodesToClean)
If InStr(S, Chr(CodesToClean(X))) Then S = Replace(S, Chr(CodesToClean(X)), "")
Next
CleanTrim = WorksheetFunction.Trim(S)
End Function
바로 이것:
str = Replace(str, vbCrLf, "")
mystring = Replace(mystring, Chr(10), "")
바꾸기(사용자 문자열, vbNewLine, ", , , vbTextCompare)
저는 이 게시물이 매우 오래되었다는 것을 알지만, 저는 이것을 할 수 있는 어떤 것도 찾을 수 없었습니다.그래서 저는 마침내 모든 포럼에서 이것을 모았습니다.
이렇게 하면 왼쪽과 오른쪽에서 모든 줄 바꿈이 제거되고 빈 줄이 제거됩니다.그런 다음 보기 좋게 모두 다듬습니다.적합하다고 생각되는 대로 변경합니다.관심이 있다면 모든 줄 바꿈을 제거하는 것도 만들었습니다.TY
Sub RemoveBlankLines()
Application.ScreenUpdating = False
Dim rngCel As Range
Dim strOldVal As String
Dim strNewVal As String
For Each rngCel In Selection
If rngCel.HasFormula = False Then
strOldVal = rngCel.Value
strNewVal = strOldVal
Debug.Print rngCel.Address
Do
If Left(strNewVal, 1) = vbLf Then strNewVal = Right(strNewVal, Len(strNewVal) - 1)
If strNewVal = strOldVal Then Exit Do
strOldVal = strNewVal
Loop
Do
If Right(strNewVal, 1) = vbLf Then strNewVal = Left(strNewVal, Len(strNewVal) - 1)
If strNewVal = strOldVal Then Exit Do
strOldVal = strNewVal
Loop
Do
strNewVal = Replace(strNewVal, vbLf & vbLf, "^")
strNewVal = Replace(strNewVal, Replace(String(Len(strNewVal) - _
Len(Replace(strNewVal, "^", "")), "^"), "^", "^"), "^")
strNewVal = Replace(strNewVal, "^", vbLf)
If strNewVal = strOldVal Then Exit Do
strOldVal = strNewVal
Loop
If rngCel.Value <> strNewVal Then
rngCel = strNewVal
End If
rngCel.Value = Application.Trim(rngCel.Value)
End If
Next rngCel
Application.ScreenUpdating = True
End Sub
Private Sub Form_Load()
Dim s As String
s = "test" & vbCrLf & "this" & vbCrLf & vbCrLf
Debug.Print (s & Len(s))
s = Left(s, Len(s) - Len(vbCrLf))
Debug.Print (s & Len(s))
End Sub
여러 개의 후행 캐리지 리턴이 있는 경우 다른 답변(한 가지 예외를 제외하고 내 편집 참조)은 처리되지 않습니다.공간뿐만 아니라 캐리지 리턴을 제거하는 "트림"과 유사한 기능을 만드는 것이 목표라면, 하나만 제거하는 것이 아니라 최대한 많이 제거할 수 있을 정도로 견고하기를 원할 것입니다.또한 VBA에서 "왼쪽" 또는 "오른쪽" 기능은 VB에 없기 때문에 사용하지 않는 것이 좋습니다.Net. Office VBA 매크로를 VSTOCOM 추가 기능으로 변환해야 할 경우 VBA에만 있는 기능을 사용하지 않는 것이 좋습니다.
Function RemoveTrailingWhiteSpace(s As String) As String
RemoveTrailingWhiteSpace = s
Dim StrLen As Long
StrLen = Len(RemoveTrailingWhiteSpace)
While (StrLen > 0 And (Mid(RemoveTrailingWhiteSpace, StrLen) = vbCr Or Mid(RemoveTrailingWhiteSpace, StrLen) = vbLf) Or Mid(RemoveTrailingWhiteSpace, StrLen) = " ")
RemoveTrailingWhiteSpace = Mid(RemoveTrailingWhiteSpace, 1, StrLen - 1)
StrLen = Len(RemoveTrailingWhiteSpace)
Wend
End Function
편집: 여기에 캐리지 리턴과 문자열 양쪽 끝의 공백을 잘라내는 다른 답변이 나열되어 있지만, 훨씬 더 복잡해 보였습니다.이것은 꽤 간결하게 수행될 수 있습니다.
아무도 RegExp 솔루션을 제안한 적이 없습니다.여기에 하나가 있습니다.
Function TrimTrailingLineBreak(pText)
Dim oRE: Set oRE = New RegExp: oRE.Global = True
oRE.Pattern = "(.*?)(\n|(\r\n)){1}$"
TrimTrailingLineBreak = oRE.Replace(pText, "$1")
End Function
그것은 모든 것을 캡처하고 한 번까지 반환합니다.{1}
) 후행 새 줄(\n
) 또는 캐리지 리턴 & 새 라인(\r\n
), 텍스트 끝에 있습니다.$
).
모든 후행 줄 바꿈을 제거하는 방법{1}
로.*
.
모든 후행 공백(줄 바꿈 포함)을 제거하려면 다음을 사용합니다.oRE.Pattern = "(.*?)\s*$"
.
이 정도면 좋겠군요. 안 그러면 직접 물어 볼 수도 있어요.
Sub RemoveBlankLines()
Application.ScreenUpdating = False
Dim rngCel As Range
Dim strOldVal As String
Dim strNewVal As String
For Each rngCel In Selection
If rngCel.HasFormula = False Then
strOldVal = rngCel.Value
strNewVal = strOldVal
Debug.Print rngCel.Address
Do
If Left(strNewVal, 1) = vbLf Then strNewVal = Right(strNewVal, Len(strNewVal) - 1)
If strNewVal = strOldVal Then Exit Do
strOldVal = strNewVal
Loop
Do
If Right(strNewVal, 1) = vbLf Then strNewVal = Left(strNewVal, Len(strNewVal) - 1)
If strNewVal = strOldVal Then Exit Do
strOldVal = strNewVal
Loop
Do
strNewVal = Replace(strNewVal, vbLf & vbLf, "^")
strNewVal = Replace(strNewVal, Replace(String(Len(strNewVal) - _
Len(Replace(strNewVal, "^", "")), "^"), "^", "^"), "^")
strNewVal = Replace(strNewVal, "^", vbLf)
If strNewVal = strOldVal Then Exit Do
strOldVal = strNewVal
Loop
If rngCel.Value <> strNewVal Then
rngCel = strNewVal
End If
rngCel.Value = Application.Trim(rngCel.Value)
End If
Next rngCel
Application.ScreenUpdating = True
End Sub
저도 똑같은 문제가 있었습니다.필요할 때 쉽게 부를 수 있는 별도의 기능을 만들었습니다.
Function removeLineBreakIfAtEnd(s As String) As String
If Right(s, 1) = vbLf Then s = Left(s, Len(s) - 2)
removeLineBreakIfAtEnd = s
End Function
마지막 문자만 확인하고 줄 바꿈을 제거하기 위해 -2를 해야 한다는 것을 알았습니다.또한 vblf를 확인하는 것이 줄 바꿈을 감지하는 유일한 방법이라는 것을 알게 되었습니다.함수는 다음과 같이 호출할 수 있습니다.
Sub MainSub()
Dim myString As String
myString = "Hello" & vbCrLf
myString = removeLineBreakIfAtEnd(myString)
MsgBox ("Here is the resulting string: '" & myString & "'")
End Sub
언급URL : https://stackoverflow.com/questions/10024402/how-to-remove-line-break-in-string
'programing' 카테고리의 다른 글
ng-if와 ng-show/ng-hide의 차이점은 무엇입니까? (0) | 2023.05.01 |
---|---|
Tkinter에서 두 프레임을 전환하시겠습니까? (0) | 2023.05.01 |
4xx/5xx에 예외를 던지지 않는 PowerShell 웹 요청 (0) | 2023.05.01 |
유형 오류: _thread.lock 개체를 피클할 수 없습니다. (0) | 2023.05.01 |
네트워크 공유에서 파일을 잠그는 사용자 확인 (0) | 2023.05.01 |