<기름쟁이님의 사이트>에서 여기저기 수소문을 통해 <밀레니엄CD>라는 것을 구할 수 있었다. 밀레니엄 CD를 구하기까지, 실로 많은 노력을 기울인 것 같다. 마침내 구하게 되어 매우 기쁘다. ^^;

이 CD에서 특히나 내 눈길을 잡아 끈 것은 

과거 200LX 유저들의 통신동호회 게시판 등을 통한 글들이 고스란히 누적된 10년치의 기록이 담겨있는 8000개에 달하는 텍스트파일들로 구성된 DB 였다. 이 DB는 8000여개로 구성된 TEXT파일들을 자바코드로 작성된 단일 html 페이지에서 웹브라우져를 통해 접근하는 방식이다. 나는 이 DB를 PDF로 변환 후 아이패드에 담아서 읽기를 원했다. 그런데, 공교롭게도 이 DB는 글들의 제목을 인덱스로 담고 있는 텍스트 파일 1개와 해당 인덱스의 내용에 해당하는 내용파일들을 8000여개로 별도로 분리된 방식으로 구성되어 있었다. 제목만을 담고 잇는 마스터 인덱스 파일 1개와 제목이 없는 8000개의 텍스트 파일들... 


좀 난감했다. 왜냐하면, 8000개의 텍스트 파일을 합쳐봤자, 각각의 텍스트 파일에 글의 제목이 없기때문에 그 글이 무엇에 관한 내용인지 알 수가 없었기 때문이다. 


내용을 이해하기 위해서는 제목이 꼭 필요했고, 이를 위해서는 텍스트 에디터 프로그램으로 인덱스 파일을 열어서 특정 제목 한 줄을 Cut한다. 그리고, 단행본으로 담을 새로운 파일을 만든 후, 그 단행본 파일에다 Cut했던 한줄의 제목을 Paste 한다. 그 다음, 이 제목의 실제 내용에 해당하는 실제 내용파일(파일안에 내용만 있고 제목은 없음)을 열어서 내용 전체를 Copy한 다음, 단행본 파일로 다시 이동하여 클립보드로 복사한 내용을 Paste한다. 


이런 식의 작업을 8000번 반복 시행하면 단행본 Text 파일로 만들 수 있고, 이 Text 파일을 PDF로 변환하면 아이패드에서 편하게 읽을 수 있는 것이었다. 하지만, 내가 정신이 나가지 않고서야 실제로 이런 바보같은 짓을 할리가 없다.


이런류의 작업을 어떻게 해야하는 것인가를 인터넷에서 찾아보니 텍스트 파일의 텍스트 처리(특정 조건에 부합하는 텍스트를 붙이고, 자르고, 합치고 특정 문자열이 들어가는 것은 제외하고 등등 이런 것을 정규식이라고 하는 것 같았다.)를 하는 데는 펄(Perl)이라는 언어가 강력하다는 정보를 접했다. 나는 초등학교 시절에 베이직(BASIC) 언어를 잠깐 접해본 것 이외에는 컴퓨터 프로그래밍 언어에 별다른 지식이 없다.


따라서, 내가 펄(Perl)이라는 언어를 1~2시간안에 배울 수 있는 것도 아니고... 결국, 다른 방법을 찾다가 도스의 배치파일에 프로그래밍 기능이 다소 포함되어있음을 알게되었다. 95LX의 메뉴얼에 포함된 DOS에 대한 설명 중 반복작업관련 구문(For 명령)에 대한 설명을 읽고, 다른 관련 명령어들에 대한 설명들을 30분 정도 읽어 배치파일의 로직(logic)을 이해한 다음, 예제를 참고해가면서 배치파일을 작성했다. 


결과는 대실패...


아무리 해봐도 내가 원하는 결과를 얻을 수 없었다. 내가 생각하기에는 맞는 것 같은데... 도대체 뭐가 잘못되었는지 알 수가 없었다. 작성한 배치파일을 실행하면 화면에 나타나는 것은 내가 이해할 수 없는 의미의 에러메시지 뿐... 

1시간여를 삽질후, 짜증이 머리끝까지 뻗쳐서 에잇!하는 탄성과 함께 침대에 벌러덩 누워 30분 정도를 멍하게 있었다. 별로 어려운 것도 아닌 것 같은데... 왜 안되는거야!!! 


다시 심기일전하여 마음을 가다듬고 인터넷 검색을 통해 여러 블로그들의 예제를 차분히 참조해가며 삽질을 거듭했다. 반복되는 시행착오와 실패를 계속한 끝에 결국 아래와 같은 허접하기 그지없는 배치파일 코드를 완성했다.


※ 아래의 블로그 글이 결정적으로 큰 도움이 되었다.

★ 배치파일에서 For 문의 사용법: http://koc2000.tistory.com/entry/FOR-1


@echo off

Setlocal

rem set Sum=0

Set Subtemp=%1


for /f "delims="  %%j IN (db_index) do (    ; db_index라는 텍스트파일에서 한줄씩 잘라내어, 

  echo %%j >> out.new2                        ; out.new2 파일에 한줄 카피(글의 제목이 된다)

  call:ReadFile                                       ; 한줄 카피한 다음에 다른 글의 내용을 덧붙이기 위한 서브루틴 호출

rem  goto:eof                                         ; 이러한 루틴을 8000회 반복하게 된다.

)

rem  


:ReadFile                                              ; 위에서 호출되는 서브루틴, out.new2에 한줄 카피된 제목 밑에 다른 파일에 존재하는 

set /a Subtemp=%Subtemp%+1               ; 실제 내용을 덧붙이기 위한 것), 파일 넘버를 매기고, 

rem set /a Sum=%Sum%+%Subtemp%     ; 하나씩 차례로 파일 번호를 증가시켜나가기 위한 것

rem Echo %Subtemp%

set TT=hplx%Subtemp%.txt                      ; 지정되는 대상파일을 다음 번호의 파일로 변경하기 위한 것

rem Echo %TT%

type %TT% >> out.new2                        ; 지정된 파일의 내용을 out.new2에 이미 한줄 첨가된 제목 밑에 붙여준다.

echo ------------------  >> out.new2   ; 다음 글의 제목과 구분되기 위해 --------------를 써준다.

goto:eof


@echo off 앞에 rem을 붙여 rem @echo off 로 하여 실행시키면, 배치파일의 모든 실행결과를 화면으로 볼 수 있게 된다. 원하는 작업 결과가 화면에 쭈우우우욱~ 빠르게 정신없이 올라가는 것을 본 순간 그 희열은 엄청났던 것 같다. 

시계를 보니 위와 같은 불과 10여줄의 배치파일을 작성하는데 3시간도 넘게 걸렸다. 예제를 보면서 했는데도 에러가 계속 나는데, 도대체 로직(logic)은 제대로 된 것 같은데 왜 에러가 나는지 그 원인을 알 수가 없었기 때문이다. 


 두가지 모듈로 쪼개어서 테스트해서 각각의 결과가 정상적으로 나오는 것을 확인한 다음 두 모듈을 합치는 방식으로 해결했다. 

8000개의 글로 이루어진 단행본은 너무나 페이지가 방대했기때문에, 1000개씩 끊어서 8개의 단행본으로 분할했다. 위의 배치파일을 8번 실행하는 것 만으로 모든 작업이 끝났다.  작업이 끝나고 그 결과 생성된 8개의 단행본 Text파일을 PDF로 무사히 변환하여, 아이패드에 옮겼다. 머리가 복잡할때 틈틈히 읽을 요량이다.


만약 파일사이를 오가며 마우스와 키보드를 바쁘게 조작하며 Cut과 파일 Open, Alt+Tab, Paste로 이루어지는 원시적인 닥질식 작업을 반복했더라면 이틀을 꼬박 작업하더라도 끝내지 못했을 것이다. 이번 작업을 하면서 문외한의 짧은 소견이지만, 도스 배치파일은 프로그래밍 언어로서는 보다 정밀한 텍스트의 처리에 역부족이라는 생각이 들었다. 내가 이번에 무식한 삽질을 거듭하면서 느낀 생각이다.


이번 일을 통해, 펄(Perl)이라는 언어에 대해 관심이 생겼다. 펄(Perl)의 텍스트 처리가 강력하기로 그렇게 명성이 높다면, 200LX가 생성해내는 텍스트의 처리에 펄(Perl)이 큰 도움을 줄 수 있을지도 모르겠다. 적당한 책을 찾아 나중에 시간이 되면 한번 도전해봐야겠다는 생각을 해본다. 아마존에 접속해 몇몇 책을 살펴봤는데, 일단 Perl For Dummy(펄 for 더미)라는 책이 눈에 띈다.


시간이 난다면, Perl의 텍스트 처리 부분이라도 익혀볼 요량이다.

Posted by 200LXer
: