Ler de arquivo texto direto para get

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

labaroazul
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 26 Fev 2008 14:52
Localização: São Paulo - SP
Contato:

Ler de arquivo texto direto para get

Mensagem por labaroazul »

Olá, amigos!

Na tela inicial de um sistema que estou desenvolvendo, o usuário deve dizer ao programa onde estão as bases de dados (.dbf) que serão usadas para o processamento, informando isso num GET. Caso o usuário altere dado, ele deve ser registrado num arquivo .ini a ser guardado no diretório do programa e lido quando o programa for reiniciado, de forma que o usuário não tenha de digitá-lo novamente.

Alguém sabe como fazer isso?

Código: Selecionar todos

SELECT 1
IF .NOT. ABRE("EMPRESAS.DBF", 5,"C")
    ALERTA("'EMPRESAS.DBF' INDISPONIVEL NO MOMENTO!",{"OK"},"W+/B")
    SET CURSOR ON
    SET COLOR TO
    CLEAR SCREEN
    RETURN
END IF
SET INDEX TO EMPR0001.CDX, EMPR0002.CDX

PUBLIC cHOJE := DTOC(DATE())
PUBLIC cUSUARIO := SPACE(08)
PUBLIC cEMPRESA := SPACE(10)
PUBLIC cDIRETORIO := IIF(LEN("C:\" + ALLTRIM(CURDIR("C")) + "\") < 40, "C:\" + ALLTRIM(CURDIR("C")) + "\" + SPACE(40 - LEN("C:\" + ALLTRIM(CURDIR("C")) + "\")), LEFT("C:\" + ALLTRIM(CURDIR("C")) + "\",40))
PUBLIC cEMPRRAZAO := SPACE(50)
PUBLIC cEMPREND := SPACE(50)
PUBLIC cEMPRBAI := SPACE(40)
PUBLIC cEMPRCEP := SPACE(10)
PUBLIC cEMPRCID := SPACE(50)
PUBLIC cEMPRUF := SPACE(02)
PUBLIC cEMPRTEL := SPACE(50)
PUBLIC cEMPRFAX := SPACE(50)
PUBLIC cEMPREMA := SPACE(50)

DO WHILE .T.
    SET COLOR TO W+/W
    @ 00,00 CLEAR TO 23,79
    SET COLOR TO W+/N
    @ 24,00 CLEAR TO 24,79
    @ 24,00 SAY "<ESC>SAIR"
    SET COLOR TO W+/B
    @ 00,00 CLEAR TO 00,79
    @ 00,00 SAY "GERAD - SISTEMA DE GERENCIAMENTO ADMINISTRATIVO"
    SET COLOR TO W+/B,W+/B
    @ 08,28 CLEAR TO 12,49
    @ 08,28 TO 12,49
    @ 08,36 SAY "ACESSO"
    DBGSHADOW(08,28,12,49)
    @ 16,19 CLEAR TO 18,60
    @ 16,19 TO 18,60
    @ 16,29 SAY "DIRETORIO DE TRABALHO"
    DBGSHADOW(16,19,18,60)
    SET CURSOR ON
    @ 09,29 SAY "DATA...: "
    @ 10,29 SAY "USUARIO: "
    @ 11,29 SAY "EMPRESA: "
    @ 09,38 GET cHOJE PICTURE "99/99/9999" VALID(VALIDATA(cHOJE) = .T.) SEND COLORSPEC := "W+/B,W+/N" 
    @ 10,38 GET cUSUARIO PICTURE "@!" SEND COLORSPEC := "W+/B,W+/N"
    @ 11,38 GET cEMPRESA PICTURE "@!" SEND COLORSPEC := "W+/B,W+/N"
    @ 17,20 GET cDIRETORIO PICTURE "@!" SEND COLORSPEC := "W+/B,W+/N"
    READ
    IF LASTKEY() = 27
        EXIT
    ENDIF
    IF (LEN(ALLTRIM(cUSUARIO)) > 0) .AND. (LEN(ALLTRIM(cEMPRESA)) > 0)
        SELECT 1
        SET ORDER TO 1
        IF RECCOUNT() > 0
            IF DBSEEK(cEMPRESA) = .T.
                cEMPRRAZAO := RAZAO
                cEMPREND := ENDERECO
                cEMPRBAI := BAIRRO
                cEMPRCEP := CEP
                cEMPRCID := CIDADE
                cEMPRUF := UF
                cEMPRTEL := TEL
                cEMPRFAX := FAX
                cEMPREMA := EMAIL
                SET CURSOR OFF
                DO MENU
                EXIT
            ELSE
                ALERTA("EMPRESA NAO ENCONTRADA!",{"OK"},"W+/B")
                LOOP
            ENDIF
        ELSE
            DO EMPRESAS
            DO MENU
            EXIT
        END IF
    ELSE
        ALERTA("PREENCHA OS CAMPOS USUARIO E EMPRESA PARA OBTER ACESSO AO SISTEMA!",{"OK"},"W+/B")
        LOOP
    ENDIF
ENDDO
SET CURSOR OFF
SET COLOR TO
CLEAR SCREEN
RETURN

FUNCTION ABRE(cARQUIVO, nTEMPO, cMODO)
DO WHILE nTEMPO > 0
    IF cMODO = "C"
        USE &cARQUIVO SHARED
    ELSE
        USE &cARQUIVO EXCLUSIVE
    ENDIF
    IF NETERR()
        nTEMPO = nTEMPO - 0.5
        INKEY(0.5)
    ELSE
        RETURN(.T.)
    ENDIF
ENDDO
RETURN(.F.)
Windows XP Professional + Clipper 5.2e + Exospace + Dbase III Plus + SIX3 + NoDosImp + LXPic
"O trabalho afasta três males: o vício, a pobreza e o tédio." (Voltaire)
Site: http://www.labaroazul.xpg.com.br
Repositório: http://www.4shared.com/dir/31334106/e79 ... aring.html
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Ler de arquivo texto direto para get

Mensagem por ANDRIL »

Voce podera pegar a var cDiretorio e gravar atraves das funcoes MEMOEDIT, MEMOWRIT ou FOPEN, FREAD, FCLOSE ou ate mesmo SET PRINTER TO nome do arquivoini

Quando for abrir seu sistema, basta ler o arquivoini e obter o parametro especificado.

Se for obrigatorio usar um INI com chaves, veja esta função do site do Toledo sobre ARQUIVOS INI COM CLIPPER:

https://pctoledo.org/download/cop ... t&deonde=2

Eu particulamente, monto um arquivo TXT com estrutura fixa e marco em qual linha ira constar o parametro que quero, assim leio atraves de MEMOEDIT e MEMOLINE para obter a linha desejada, exemplo:

Arquivo INICIO.TXT

Código: Selecionar todos

01 [CAMINHO DOS DADOS]
02 c:\minhapasta
03
04 [CAMINHO DOS INDICES]
05 c:\minhapasta\meusindices
06
07 [COR DA TELA INICIAL]
08 AZUL
Para obter o diretorio inicial

Código: Selecionar todos

string=memoread("INICIO.TXT",80)
cDIRETORIO:=memoline(string,80,02)
Até+,
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
labaroazul
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 26 Fev 2008 14:52
Localização: São Paulo - SP
Contato:

Re: Ler de arquivo texto direto para get

Mensagem por labaroazul »

Obrigado, Andril!

Graças à sua dica consegui resolver o problema. E fiz algumas melhorias no meu código fonte, que ficou "chuchu beleza"!

Código: Selecionar todos

SELECT 1
IF .NOT. ABRE("ESCOLAS.DBF", 5,"C")
    ALERT("ARQUIVO ESCOLAS.DBF INDISPONIVEL NO MOMENTO!",{"OK"},"W+/N")
    SET CURSOR ON
    SET COLOR TO
    CLEAR SCREEN
    RETURN
END IF
SET INDEX TO ESC0001.CDX, ESC0002.CDX

PUBLIC cHOJE := DTOC(DATE())
PUBLIC cUSUARIO := SPACE(08)
PUBLIC cESCOLA := SPACE(10)
PUBLIC cDIRETORIO := IIF(LEN("C:\" + ALLTRIM(CURDIR("C")) + "\") < 40, "C:\" + ALLTRIM(CURDIR("C")) + "\" + SPACE(40 - LEN("C:\" + ALLTRIM(CURDIR("C")) + "\")), LEFT("C:\" + ALLTRIM(CURDIR("C")) + "\",40))
PUBLIC cESCNOME := SPACE(50)
PUBLIC cESCEND := SPACE(50)
PUBLIC cESCBAI := SPACE(40)
PUBLIC cESCCEP := SPACE(10)
PUBLIC cESCCID := SPACE(50)
PUBLIC cESCUF := SPACE(02)
PUBLIC cESCTEL := SPACE(50)
PUBLIC cESCFAX := SPACE(50)
PUBLIC cESCEMA := SPACE(50)
PUBLIC cESCCRI := SPACE(50)
PUBLIC cESCINS := SPACE(50)
DO WHILE .T.
    SET COLOR TO W+/N,W+/N
    CLEAR SCREEN
    @ 24,00 SAY "<ESC>SAIR"
    LOGO("ESCOLAR 10",00,00)
    @ 09,13 TO 14,65
    SET CURSOR ON
    @ 10,14 SAY "DATA.....:" GET cHOJE PICTURE "99/99/9999" VALID(VALIDATA(cHOJE) = .T.) SEND COLORSPEC := "W+/N,N/W" 
    @ 11,14 SAY "USUARIO..:" GET cUSUARIO PICTURE "@!" SEND COLORSPEC := "W+/N,N/W"
    @ 12,14 SAY "ESCOLA...:" GET cESCOLA PICTURE "@!" SEND COLORSPEC := "W+/N,N/W"
    @ 13,14 SAY "DIRETORIO:" GET cDIRETORIO PICTURE "@!" SEND COLORSPEC := "W+/N,N/W"
    READ
    IF LASTKEY() = 27
        EXIT
    ENDIF
    IF (LEN(ALLTRIM(cUSUARIO)) > 0) .AND. (LEN(ALLTRIM(cESCOLA)) > 0)
        SELECT 1
        SET ORDER TO 1
        IF RECCOUNT() > 0
            IF DBSEEK(cESCOLA) = .T.
                cESCNOME := NOME
                cESCEND := ENDERECO
                cESCBAI := BAIRRO
                cESCCEP := CEP
                cESCCID := CIDADE
                cESCUF := UF
                cESCTEL := TEL
                cESCFAX := FAX
                cESCEMA := EMAIL
                cESCCRI := CRIACAO
                cESCINS := INSTALACAO
                SET CURSOR OFF
                DO MENU
                EXIT
            ELSE
                ALERT("ESCOLA NAO ENCONTRADA!",{"OK"},"W+/N")
                LOOP
            ENDIF
        ELSE
            DO ESCOLAS
            DO MENU
            EXIT
        END IF
    ELSE
        ALERT("PREENCHA OS CAMPOS CORRETAMENTE PARA OBTER ACESSO AO SISTEMA!",{"OK"},"W+/N")
        LOOP
    ENDIF
ENDDO
SET CURSOR OFF
SET COLOR TO
CLEAR SCREEN
RETURN
Windows XP Professional + Clipper 5.2e + Exospace + Dbase III Plus + SIX3 + NoDosImp + LXPic
"O trabalho afasta três males: o vício, a pobreza e o tédio." (Voltaire)
Site: http://www.labaroazul.xpg.com.br
Repositório: http://www.4shared.com/dir/31334106/e79 ... aring.html
labaroazul
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 26 Fev 2008 14:52
Localização: São Paulo - SP
Contato:

Re: Ler de arquivo texto direto para get

Mensagem por labaroazul »

Ai, ai, ai! ´o)

Acabei postando o código antigo...

À noite eu procuro melhor e posto o código correto. Desculpem! :%
Windows XP Professional + Clipper 5.2e + Exospace + Dbase III Plus + SIX3 + NoDosImp + LXPic
"O trabalho afasta três males: o vício, a pobreza e o tédio." (Voltaire)
Site: http://www.labaroazul.xpg.com.br
Repositório: http://www.4shared.com/dir/31334106/e79 ... aring.html
labaroazul
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 26 Fev 2008 14:52
Localização: São Paulo - SP
Contato:

Re: Ler de arquivo texto direto para get

Mensagem por labaroazul »

Gente, aí vai o código correto. Com as dicas que me deram, ficou um "chuchu"!

Código: Selecionar todos

SELECT 1
IF .NOT. ABRE("EMPRESAS.DBF", 5,"C")
    ALERTA("'EMPRESAS.DBF' INDISPONIVEL NO MOMENTO!",{"OK"},"W+/B")
    SET CURSOR ON
    SET COLOR TO
    CLEAR SCREEN
    RETURN
END IF
SET INDEX TO EMPR0001.CDX, EMPR0002.CDX

PUBLIC cHOJE := DTOC(DATE())
PUBLIC cUSUARIO := SPACE(08)
PUBLIC cEMPRESA := SPACE(10)
IF FILE("C:\" + ALLTRIM(CURDIR("C")) + "\GERAD.INI")
    cTEXTO = MEMOREAD("C:\" + ALLTRIM(CURDIR("C")) + "\GERAD.INI",80)
    PUBLIC cDIRETORIO := LEFT(MEMOLINE(cTEXTO,80,01),40)
ELSE
    PUBLIC cDIRETORIO := IIF(LEN("C:\" + ALLTRIM(CURDIR("C")) + "\") < 40, "C:\" + ALLTRIM(CURDIR("C")) + "\" + SPACE(40 - LEN("C:\" + ALLTRIM(CURDIR("C")) + "\")), LEFT("C:\" + ALLTRIM(CURDIR("C")) + "\",40))
ENDIF
PUBLIC cEMPRRAZAO := SPACE(50)
PUBLIC cEMPREND := SPACE(50)
PUBLIC cEMPRBAI := SPACE(40)
PUBLIC cEMPRCEP := SPACE(10)
PUBLIC cEMPRCID := SPACE(50)
PUBLIC cEMPRUF := SPACE(02)
PUBLIC cEMPRTEL := SPACE(50)
PUBLIC cEMPRFAX := SPACE(50)
PUBLIC cEMPREMA := SPACE(50)

DO WHILE .T.
    SET COLOR TO W+/W
    @ 00,00 CLEAR TO 23,79
    SET COLOR TO W+/N
    @ 24,00 CLEAR TO 24,79
    @ 24,00 SAY "<ESC>SAIR"
    SET COLOR TO W+/B
    @ 00,00 CLEAR TO 00,79
    @ 00,00 SAY "GERAD - SISTEMA DE GERENCIAMENTO ADMINISTRATIVO"
    SET COLOR TO W+/B,W+/B
    @ 08,28 CLEAR TO 12,49
    @ 08,28 TO 12,49
    @ 08,36 SAY "ACESSO"
    DBGSHADOW(08,28,12,49)
    @ 16,19 CLEAR TO 18,60
    @ 16,19 TO 18,60
    @ 16,29 SAY "DIRETORIO DE TRABALHO"
    DBGSHADOW(16,19,18,60)
    SET CURSOR ON
    @ 09,29 SAY "DATA...: "
    @ 10,29 SAY "USUARIO: "
    @ 11,29 SAY "EMPRESA: "
    @ 09,38 GET cHOJE PICTURE "99/99/9999" VALID(VALIDATA(cHOJE) = .T.) SEND COLORSPEC := "W+/B,W+/N" 
    @ 10,38 GET cUSUARIO PICTURE "@!" SEND COLORSPEC := "W+/B,W+/N"
    @ 11,38 GET cEMPRESA PICTURE "@!" SEND COLORSPEC := "W+/B,W+/N"
    @ 17,20 GET cDIRETORIO PICTURE "@!" SEND COLORSPEC := "W+/B,W+/N"
    READ
    IF LASTKEY() = 27
        EXIT
    ENDIF
    IF (LEN(ALLTRIM(cUSUARIO)) > 0) .AND. (LEN(ALLTRIM(cEMPRESA)) > 0) .AND. (LEN(ALLTRIM(cDIRETORIO)) > 0)
        cARQINI = "C:\" + ALLTRIM(CURDIR("C")) + "\GERAD.INI"
        IF FILE(cARQINI)
            ERASE &cARQINI
        ENDIF
        SET PRINTER TO &cARQINI
        SET PRINTER ON
        ?? ALLTRIM(cDIRETORIO)
        SET DEVICE TO SCREEN
        SET PRINTER OFF
        SET PRINTER TO
        SET CONSOLE ON
        SELECT 1
        SET ORDER TO 1
        IF RECCOUNT() > 0
            IF DBSEEK(cEMPRESA) = .T.
                cEMPRRAZAO := RAZAO
                cEMPREND := ENDERECO
                cEMPRBAI := BAIRRO
                cEMPRCEP := CEP
                cEMPRCID := CIDADE
                cEMPRUF := UF
                cEMPRTEL := TEL
                cEMPRFAX := FAX
                cEMPREMA := EMAIL
                SET CURSOR OFF
                DO MENU
                EXIT
            ELSE
                ALERTA("EMPRESA NAO ENCONTRADA!",{"OK"},"W+/B")
                LOOP
            ENDIF
        ELSE
            DO EMPRESAS
            ALERTA("REINICIE O SISTEMA PARA ACESSA-LO COM A NOVA EMPRESA!",{"OK"},"W+/B")
            EXIT
        END IF
    ELSE
        ALERTA("PREENCHA OS CAMPOS CORRETAMENTE PARA OBTER ACESSO AO SISTEMA!",{"OK"},"W+/B")
        LOOP
    ENDIF
ENDDO
SET CURSOR OFF
SET COLOR TO
CLEAR SCREEN
RETURN
Windows XP Professional + Clipper 5.2e + Exospace + Dbase III Plus + SIX3 + NoDosImp + LXPic
"O trabalho afasta três males: o vício, a pobreza e o tédio." (Voltaire)
Site: http://www.labaroazul.xpg.com.br
Repositório: http://www.4shared.com/dir/31334106/e79 ... aring.html
Responder