방개
비밀번호를 잊어버리셨나요?

질문

이름이 계속 바뀌어서 새로 생성되는 텍스트파일 찾아서 그 안의 텍스트 중 n번째에서 원하는 곳만 긁어오기

    • 글자 크기

이름이 계속 바뀌어서 새로 생성되는 텍스트파일 찾아서 그 안의 텍스트 중 n번째에서 원하는 부분만 긁어와서 복사하기가 가능할까요?

찾는 방법이나 관련 명령어만 알려주셔도 알아서 찾아보겠습니다..ㅠㅠ

    • 글자 크기
댓글 9
  • 2020.5.11 15:01 댓글

    이름이 계속 바뀌면 사람도 모르지 않을까요..? ㅎㅎ

    이름에 규칙이 있거나, 아니면 생겼을 때 그 텍스트 파일을 구분할 수 있는 특징이 있다면 가능합니다. 

    물론, 특정한 경로에 생겨야하고요.

  • 프날님께
    김훈이글쓴이
    2020.5.11 15:35 댓글

    만들어진 날짜가 가장 가까운 파일을 긁어올꺼구요.. 특정한 경로에만 생깁니다!

    ord9_HOONING_0.txt 에서 0의 숫자가 점점 높아지는 파일입니다!

  • 김훈이님께
    2020.5.11 17:21 댓글

    만들어진 날짜가 제일 가까우면 쉽네요! Loop, Files를 이용하신 다음, A_LoopFileTimeCreated를 비교해나가시면 되겠습니다.

    그 후 FileReadLine으로 특정 줄을 읽어오시면 되겠네요.

     

    Loop, Files, %A_DeskTop%\*.*
    {
        if (recentFileTime < A_LoopFileTimeCreated)
        {
            recentFileTime := A_LoopFileTimeCreated
            recentFile := A_LoopFileName
        }
    }
    FileReadLine, var, %recentFile%, 5
    MsgBox, % var

    위 예제는 바탕화면에 있는 파일 중 만든 시간이 제일 최근인 파일의 이름을 가져온 다음,

    그 파일의 5번째 줄을 읽는 예제입니다. (txt파일일 경우)

     

    그대로 이 스크립트를 붙여넣으면 활용이 힘드실 수 있으니, 공부하신 후 변형해서 쓰심 되겠습니다.

     

  • 2020.5.11 17:23 댓글

    정확하게 그 문서만 가져오신다면 이런식으로 정규식 비교문을 하나 쓰셔도 좋겠네요
     

    Loop, Files, *.txt
    {
    	if (RegExMatch(A_LoopFileName, "ord9_HOONING_(/d)+.txt"))
    		MsgBox, % A_LoopFileName
    }

     

  • 프날님께
    김훈이글쓴이
    2020.5.11 18:41 댓글

    귀찮으실텐데 자세한 답변 정말로 감사합니다__ㅠㅠ

    혹시 프날님이 올리신 강좌중에 이런식의 강좌가 무슨 이름인지 여쭤봐도 될까요?

    그리고 n번째줄의 텍스트 중 원하는 부분만 가져올수는 있을까요? 감사합니다.

  • 김훈이님께
    2020.5.11 22:47 댓글

    텍스트에서 원하는 n번째 줄 가져오는게 FileReadLine입니다.

    Loop, Files에 대한 건 강좌에는 따로있지 않아요.

  • 프날님께
    김훈이글쓴이
    2020.5.11 23:49 댓글

    제가 설명이 부족했네요. 원하는건 FileReadLine으로 가져온 n번째 줄의 내용 중 원하는 부분만 가져오고싶어서 질문했습니다! 이런 명령어는 없을까요?

    답변 감사합니다.

  • 김훈이님께
    2020.5.12 12:06 댓글

    명령어로 접근하지 마시고 문자열 파싱을 해야겠지요.


    RegEx(정규식)을 써도 되고, 단순한 패턴이라면 StrSplit()을 써도 되고, Loop, Parse로 쓰셔도 되고, SubStr()을 써도 되고...

    문자열 파싱은 너무 방법이 많아서 상황에 따라 맞는 방법으로 하시면 되겠습니다.

     

    예를들어서, "제목: 내용' 이라는 문자열에서 '내용'부분만 가져오려면

    input := "제목: 내용"
    
    ;첫 번째 방법: RegExMatch
    RegExMatch(input, ": (.*)", output)
    
    ;두 번째 방법: RegExReplace
    output2 := RegExReplace(input, "(.*): ")
    
    ;세 번째 방법: SubStr
    output3 := SubStr(input, 5)
    
    ;네 번째 방법: Loop, Parse
    Loop, Parse, input, % ":" A_Space
        if (A_index = 3)
            output4 := A_LoopField
    
    ;다섯 번째 방법: StrSplit
    arr := StrSplit(input, ": ")
    output5 := arr[2]
    
    MsgBox, % output1 "`n" output2 "`n" output3 "`n" output4 "`n" output5

     

    여러가지 방법으로 파싱을 해도 모두 같은 결과를 얻는 것을 볼 수 있습니다.

    역시.. 상황에 맞게 파싱하시면 됩니다.

     

    파싱을 하기 위해 자주 쓰이는 SubStr와 Loop, Parse는 강좌 본편에 있고,

    정규식(RegExMatch, Replace)은 부록으로 있습니다. (강좌 목록에 '강좌 이외 추가글 모음' 페이지에 있습니다.)

     

    문자열 파싱은.. 파싱하려는 문자열이 어떻게 생긴놈인지를 모르니까요

    알려드리는 입장에선 꼬집어서 명령어 하나를 말씀드릴순 없네요.

  • 프날님께
    김훈이글쓴이
    2020.5.12 20:31 댓글

    자세한 답변 감사합니다 고맙습니다!!

댓글 달기

서버에 요청 중입니다. 잠시만 기다려 주십시오...