메모장 ++를 사용하여 .txt 파일에서 하나의 문자와 세 개의 숫자 추출


0

메모장 ++에서 특정 데이터를 많은 .txt 파일에서 추출하고 싶습니다. 하나의 파일에 많은 데이터가 있지만 특정 정보 만 필요합니다 ...

이것은 파일에서 보이는 것입니다 :

© Q Ńü Vý 8ź) € G '€ \ Y € € w) € â` € K¶ K¶} ¶gg ‚Z ™ y ë (\ Y
SCfsfgh4GHGH1 + € ‡ € € € €? ° € ¸ € kk € PS 3 : 모델러 버전 1101322에 의해 생성 된 파일 전송 SCH_900000_9008 @ Ź @ -A233 ™ ž B¤ ˙˙˙˙˙˙˙˙˙˙˙˙ '˙ rtSdpeRB ˙ GÚS)

그리고 이것을 추출해야합니다 :

A233

팁 :-기호 앞에 공백이 있습니다 (-A233). 또한 모든 파일의 문자 A 옆에 다른 번호가 있습니다.

원본 파일에서 다음과 같이 보입니다 (복사 붙여 넣기를 통해 많은 공간이 추출 됨). 스크린 샷


이진 파일입니까? 데이터가있을 때 무엇을하고 싶습니까? 항상 같은 형식입니까 (문자 + 3 자리)? 항상 그 | -앞에 있습니까?
DavidPostill

데이터베이스와 비교하고 싶습니다. 예, 항상 말한 것과 같은 형식입니다. | -항상 그렇습니다. 이진 파일 질문에 관해서는, 나는 그것에 익숙하지 않으므로 답변을 드릴 수 없습니다 ...
kiki1989sb

답변:


0

다음과 함께 바꾸기 (ctrl-h)를 사용할 수 있습니다.

무엇을 찾다: .*? -(A\d+)

다음으로 교체하십시오. \1\n

파일에 ".와 일치하는 개행"상자가 있는지 확인하십시오.

설명:

.*? - -줄 바꿈을 포함하여 "-"까지의 모든 항목을 찾습니다.

(A\d+) -A 다음에 1 개 이상의 숫자가 나오는 캡처 그룹을 정의합니다.

\1\n -일치하는 번호를 캡처 한 번호와 줄 바꾸기로 대체

당신 \n은 당신이 선택한 구분 기호로 바꿀 수 있습니다

마지막 일치 이후의 텍스트는 삭제되지 않지만 이미 텍스트 편집기에 있으므로 삭제하는 것이 간단합니다.


아니요, 각 파일마다 숫자가 다르기 때문에 문자 A 옆의 숫자를 추출하고 싶습니다. 데이터베이스와 비교할 수 있도록 압축을
풀고 싶습니다

죄송하지만, 작동하지 않습니다. 이상한 숫자가 생깁니다. 각 줄에 일치합니다 ... 파일 중 일부를 업로드 했으므로 시간이 있으면 직접 확인할 수 있습니다. filedropper.com/test_63 다시 한번 감사합니다!
kiki1989sb

@ kiki1989sb : 데이터를 다운로드하려고했지만 링크를 볼 수 없습니다. 계정이 필요합니까? 필요한 경우가 아니면 가입하지 마십시오.
flyingfinger

0

.txt 파일이 많이 있으므로 각 파일에서 수동으로 값을 추출하는 대신 간단한 자동화를 수행하는 것이 좋습니다. 아래에서 WSH VBScript를 사용하는 것이 좋습니다.

strRes = ""
For Each strPath In WScript.Arguments
    With CreateObject("Scripting.FileSystemObject")
        If .FileExists(strPath) Then
            strRes = strRes & .GetFileName(strPath) & vbCrLf
            strCont = LoadTextFromFile(strPath, "us-ascii")
            With CreateObject("VBScript.RegExp")
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = "-A(\d{3})"
                Set objMatches = .Execute(strCont)
                For Each objMatch In objMatches
                    strRes = strRes & objMatch.SubMatches(0) & vbCrLf
                Next
            End With
        End If
    End With
Next
ShowInNotepad strRes

Function LoadTextFromFile(strPath, strCharset)
    With CreateObject("ADODB.Stream")
        .Type = 1 ' TypeBinary
        .Open
        .LoadFromFile strPath
        .Position = 0
        .Type = 2 ' adTypeText
        .Charset = strCharset
        LoadTextFromFile = .ReadText
        .Close
    End With
End Function

Sub ShowInNotepad(strToFile)
    Dim strTempPath
    With CreateObject("Scripting.FileSystemObject")
        strTempPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%TEMP%") & "\" & .GetTempName
        With .CreateTextFile(strTempPath, True, True)
            .WriteLine strToFile
            .Close
        End With
        CreateObject("WScript.Shell").Run "notepad.exe " & strTempPath, 1, True
        .DeleteFile (strTempPath)
    End With
End Sub

이 코드를 메모장에 붙여 넣고 텍스트 파일로 저장 한 다음 .txt파일 확장자를 수동으로 바꾸십시오 .vbs. 그런 다음 탐색기 창에서 텍스트 파일을 선택하고 스크립트로 끌어다 놓기 만하면됩니다.

공유 한 파일의 경우 다음과 같이 출력됩니다.

30_SCH51BQ139.txt

036

30_SCH51BQ141.txt

038

30_SCH51BQ144.txt

040

30_SCH51BQ147.txt

043


VBS 스크립트를 사용해보십시오. VB를 통해 이미 Excel 에서이 문제를 해결했지만 매크로 (보안) 때문에 notepad ++를 통해 만들어야합니다.
kiki1989sb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.