TXT 파일 특정 값들을 Excel이나 Matlab에서 읽기
전 초보입니다.
제 상황을 좀 더 자세히 설명 드리자면,
Matlab이나 Hspice를 돌리면 (Unix 환경), 아주 지저분한 프로그램 로그 파일 (txt 파일) 중간 중간에
write_time_rise= 1.1234E-12 targ= 2.3333E-12 trig= 3.1234E-12
write_time_fall= 1.1234E-11 targ= 2.1103E-12 trig= 3.0500E-12
write_power= 1.1234E-07 from= 2.1234E-09 to= 2.2222E-09
와 같은 결과 값들 (100개 정도) 이 있고, 이 중 제가 필요한 부분은
write_time_rise= 1.1234E-12
write_time_fall= 1.1234E-11
write_power= 1.1234E-07
들이고 각각의 값들을 읽어서 맘대로 요리 (최대값, 최소값, 평균값 등 구하고 엑셀로 예쁘게 옮겨서 플롯 등) 하고 싶습니다.
이곳 도움을 받아 grep명령어로 원하는 부분을 따로 저장해서 엑셀로 옮길 수 있게 되었습니다.
(감사합니다. 저한테는 엄청난 변화였습니다.)
이곳 글들을 읽고 일반적인 Perl이나 Python 책들을 읽었는데......포기했습니다.
그 엄청난 자료 속에서 내가 원하는 (위에서 언급한) 기능을 찾는다는 것은 초보인 저에게 너무 힘든 일이었습니다.
저에게는 Perl이나 Python으로 빠져들기 위한 '아주 쉽고 간단한' 조언을 부탁드립니다. 예를 들어,
'Perl이나 Python에서 어떤 어떤 기능이나 함수를 공부하시면 됩니다.'
'Per이나 Python으로 TXT 파일에서 특정 값을 읽어서 Excel에서 읽는 쉬운 예제 모음.'
어쩌면 게으른 초보의 건방진 질문일 수 있으나.....조금만 더 도움을 주시면 감사하겠습니다.
hyun@quicksilver:~$ echo
위에 해당되는 부분을 choroot 파일로 csv 형식으로 저장하고 octave 에서 csvread 함수로 읽었습니다. 아마 matlab 에서도 csvread 함수가 있거나 동등한 역할을 하는 함수가 있던걸로 기억합니다. 한번 확인해 보세요.
규칙이 어느정도 알려진 문자열 속에서 정해진 패턴에
규칙이 어느정도 알려진 문자열 속에서 정해진 패턴에 맞는 것들을 골라내려면 정규표현식(Regular expression, regex)을 공부하세요.
웬만한 프로그래밍 언어에서는 다 지원합니다.
피할 수 있을때 즐겨라! http://melotopia.net/b
정규 표현식이나 문자열(string) 다루는 쪽을
정규 표현식이나 문자열(string) 다루는 쪽을 집중적으로 보시면 되겠네요.
예를 들어 제가 좋아하는 루비로 해 볼까요... 데이터가 저장된 파일이 예를 들어 data.txt라고 합시다.
data.txt:
write_time_rise= 1.1234E-12 targ= 2.3333E-12 trig= 3.1234E-12
write_time_fall= 1.1234E-11 targ= 2.1103E-12 trig= 3.0500E-12
write_power= 1.1234E-07 from= 2.1234E-09 to= 2.2222E-09
파일을 읽어 오려면
이러면 data_file이라는 객체에서 data.txt의 내용을 읽을 수 있습니다. 예를 들어
라고 하면 맨 처음 줄을 읽어오고, line 변수의 값이 됩니다. 이 경우는 "write_time_rise= 1.1234E-12 targ= 2.3333E-12 trig= 3.1234E-12\n"이 되겠네요.
그러면서 읽어오는 위치를 한 줄 뒤로 합니다. 즉 다음에 data_file.gets를 하면 그 값은 "write_time_fall= 1.1234E-11 targ= 2.1103E-12 trig= 3.0500E-12\n"가 되겠죠.
일단 파일의 전체 내용을 훑으면서 한 줄씩 처리하는 걸 볼까요.
이런 루프를 통해 파일이 끝날 때까지 한 줄씩 처리를 할 수 있습니다. 물론 한 번에 파일 내용 전체를 긁어 처리하는 방법도 있습니다만 그건 나중에 하고...
이 경우에 가장 쉬운 해결책은 공백으로 쪼개는 겁니다. 즉
write_time_rise= 1.1234E-12 targ= 2.3333E-12 trig= 3.1234E-12
이걸 쪼개면
write_time_rise=
1.1234E-12
targ=
2.3333E-12
trig=
3.1234E-12
이렇게 되는데, 변수명에 공백이 없기 때문에 잘 작동하겠군요. 루비에서 이건 split 메소드를 이용하여 처리할 수 있습니다.
그럼 저 Array를 편의상 a라 했을 때, a[0]과 a[1]을 다시 출력해 볼 수 있겠네요.
그 전에 "write_time_rise=" 끝에 붙은 =가 예쁘지 않으니까 a[0] 대신 a[0][0..-2]를 씁시다. a[0]는 "write_time_rise="고, 이걸 [0..-2] 부분만 본다는 건데, [0]은 "w", [1]은 "r"... [-2]는 "e", [-1]은 "="가 됩니다.
a[1]은 실수니까, 변수 값에 string 대신 실수 타입을 쓰도록 합시다. 이건 .to_f 메소드를 이용하면 됩니다.
아 근데 더 쓰려니 피곤해지네요... 하여튼 문자열 처리와 정규 표현식을 공부하시면 될 겁니다. csv 파일 포맷은 쉼표만 찍으면 되니까 어렵지 않구요.
감사합니다.
감사합니다.
정규식도 좋지만 처음하는 경우에는 어렵지 않을까요?
그냥 C언어로 txt 파일을 분석하는 코드를 작성하는 것도 많이 어렵지는 않다고 생각합니다.
댓글 달기