차이점

이 페이지의 선택한 이전 버전과 현재 버전 사이의 차이점을 보여줍니다.

차이 보기로 연결

텍스트_파일의_내용을_브라우즈에서_수정하기 [2012/07/27 12:00] (현재)
admin 새로 만듦
줄 1: 줄 1:
 +====== 6. 텍스트 파일의 내용을 브라우즈에서 수정하기 ======
  
 +NSAMPLE/CHGDBF/TXTCHTXT.PRG
 +
 +텍스트파일을 불러 DBF메모로 바꾸어 브라우즈 상에서 편집 후 다른 텍스트파일로 저장하는 예
 +
 +  Enter : 내용 수정,  Insert : 내용 추가,   F4 : 저장
 +
 +<code>
 +#include "npp.ch"
 +MEMVAR cSFile
 +MEMVAR cTFile
 +
 +FUNCTION Main()
 +   LOCAL oDlg
 +   LOCAL oBrw
 +   LOCAL oDb
 +   Private cSFile := "s.txt"
 +   Private cTFile := "t.txt"
 +   SetHPlus(6)
 +   oDb := Load_oDb_FromText( cSFile )
 +   DEFINE DIALOG oDlg FROM 0,0 TO 300, 800 ;
 +          PIXEL
 +      @ 0,0 BROWSE oBrw OF oDlg ;
 +            PIXEL               ;
 +            oBrw:SetODBF( oDb )
 +            oBrw:nLineStyle := 0
 +            oBrw:bKeyDown := { | nKey | BrwKeyDown( nKey , oBrw, oDb ) }
 +      ADD TO oBrw DATA oDb:MEMO    ;
 +             TITLE "MEMO"          ;
 +             FIELD "MEMO"
 +      oDlg:bStart := {|| oBrw:Move( 0,0, 800,300,.t.), oBrw:BrwGoBottom() }
 +   ACTIVATE DIALOG oDlg CENTER
 +RETURN NIL
 +
 +FUNCTION Load_oDb_FromText()
 +   LOCAL oDb
 +   LOCAL nI      := 0
 +   LOCAL nLines  := 0
 +   LOCAL cBuffer := ""
 +   LOCAL aStruct := {{"MEMO", "C", 120, 0 }}
 +   oDb := Dr_aDbCreate( aStruct )
 +   IF !File( cSFile ) ; RETURN oDb ; ENDIF
 +   cBuffer := MemoRead( cSFile )
 +   nLines  := MLCount( cBuffer, 120 )
 +   FOR nI := 1 TO nLines
 +       oDb:Append()
 +       oDb:MEMO := MemoLine( cBuffer, 120, nI )
 +       oDb:Save()
 +   NEXT
 +   oDb:Gotop()
 +RETURN oDb
 +
 +FUNCTION Save_Text_FromODb( oDb )
 +   LOCAL cBuffer := ""
 +   LOCAL nFp     := 0
 +   oDb:Gotop()
 +   WHILE !oDb:Eof()
 +         cBuffer += ( oDb:MEMO + CRLF )
 +         oDb:Skip()
 +   ENDDO
 +   nFp := FCreate( cTFile )
 +   IF nFp == -1  ;  RETURN NIL  ; ENDIF
 +   FWrite( nFp, cBuffer )
 +   FClose( nFp )
 +RETURN NIL
 +
 +FUNCTION BrwKeyDown( nKey, oBrw, oDb )
 +   DO CASE
 +      CASE nKey == 13
 +           EditBrw( oBrw )
 +      CASE nKey == VK_INSERT
 +           EditBrw( oBrw, .T. )
 +      CASE nKey == VK_F4
 +           Save_Text_FromODb( oDb )
 +   ENDCASE
 +RETURN NIL
 +
 +STATIC FUNCTION EditBrw( oBrw, lInsert )
 +   LOCAL uVar := oBrw:oDbf:MEMO
 +   DEFAULT  lInsert := .F.
 +   IF !lInsert
 +      EDITCOL 1 VAR uVar OF oBrw ;
 +              VALID {| uVar, nKey | SaveLine( oBrw, uVar, nKey, .F. ) }
 +   ELSE
 +      oBrw:BrwGoBottom(2)
 +      oBrw:Refresh()
 +      uVar := space(120)
 +      EDITCOL 1 VAR uVar OF oBrw ;
 +              VALID {| uVar, nKey | SaveLine( oBrw, uVar, nKey, .T. ) } ;
 +              VIRTUAL
 +   ENDIF
 +RETURN NIL
 +
 +STATIC FUNCTION SaveLine( oBrw, uVar, nKey, lNew )
 +   IF nKey == 27
 +      RETURN .t.
 +   ENDIF
 +   IF lNew
 +      oBrw:oDbf:Append()
 +   ENDIF
 +   oBrw:oDbf:MEMO := uVar
 +   oBrw:oDbf:Save()
 +   IF lNew
 +      oBrw:Refresh()
 +   ENDIF
 +RETURN .t.
 +</code>
 

Link categories 1

Link categories 2