Page 1 of 1

El nombre de un archivo puede ser variable?

Posted: Wed Apr 23, 2008 12:02 am
by Lupita
Hola buenas tardes

Estoy definiendo el uso de un archivo ascii al inicio, segun lo muestra este codigo

function Main()

local oWnd, oGet1, oGet2 ,oGet3
LOCAL cVar1 := SPACE( 20 )
LOCAL nVar2 := 0.00
LOCAL nVar3 := 0.00
local hFile := FCreate( CurDir() + "\compra1.txt" )

Despues de la captura del registro se guarda con la instruccion definida en el evento "Nuevo", como puedo lograr que me pregunte el nombre del archivo?

@ 7, 2 BUTTON "Nuevo" SIZE 80, 20 ;
ACTION ( FWrite( hFile, AllTrim( cVar1 ) + "," + Str( nVar2, 8, 2 ) + "," + Str( nVar3, 8, 2 ) + CRLF ),;
cVar1 := Space( 20 ), nVar2 := 0.00, nVar3 := 0.00,;
oGet1:Refresh(), oGet2:Refresh(), oGet3:Refresh(), /* MiFuncionDeMedir(), */;
oGet1:SetFocus() )

Posted: Wed Apr 23, 2008 9:28 pm
by Antonio Linares
Si usas "compra1.txt" al principio luego no podrás cambiarle el nombre, salvo que lo cierres (FClose()) y lo renombres (FRename()).

Si podrías preguntar el nombre antes de crearlo, mostrando una caja de diálogo en donde pidas el nombre. Es esto lo que deseas hacer ?

Posted: Fri Apr 25, 2008 7:07 pm
by Lupita
Antonio buenas tardes,

Si, eso es lo que necesito que me pregunte el como se llamara el archivo, la variable q guardara este nombre de archivo como se define para que no sea local o no importa que sea local.

Posted: Mon Apr 28, 2008 12:00 pm
by Antonio Linares
Lupita,

Aqui tienes un ejemplo:

Code: Select all

#include "FWCE.ch" 

//----------------------------------------------------------------------------// 

function Main() 

   local oWnd, oGet1, oGet2 
   LOCAL cVar1 := SPACE( 20 ) 
   LOCAL nVar2 := 0.00
   local hFile

   DEFINE WINDOW oWnd TITLE "Captura Inventarios" 

   // MiFuncionDeMedir() 

   @ 1, 1 SAY "Codigo:"; 
      SIZE 70, 20 

   @ 1, 10 GET oGet1 VAR cVar1; 
      SIZE 140, 20 

   @ 5, 1 SAY "Cantidad:"; 
      SIZE 70, 20 

   @ 5.7, 10 GET oGet2 VAR nVar2; 
      SIZE 140, 20 PICTURE "999.99"

   @ 7, 2 BUTTON "Nuevo" SIZE 80, 20 ;
      ACTION ( FWrite( hFile, AllTrim( cVar1 ) + CRLF + Str( nVar2, 6, 2 ) + CRLF ),;
               cVar1 := Space( 20 ), nVar2 := 0.00,;
               oGet1:Refresh(), oGet2:Refresh(), /* MiFuncionDeMedir(), */;
               oGet1:SetFocus() )  

   @ 9, 2 BUTTON "Salir" SIZE 80, 20 ACTION oWnd:End()
 
   ACTIVATE WINDOW oWnd ; 
      VALID MsgYesNo( "¿ Quiere terminar ?" ) ;
      ON INIT hFile := PreguntaFichero( oWnd )

   FClose( hFile )

return nil

function PreguntaFichero( oWnd )

   local oDlg, cNombre := Space( 20 )
   
   DEFINE DIALOG oDlg TITLE "Fichero a crear" SIZE 190, 100 OF oWnd
   
   @ 0.2, 2 SAY "Nombre:" OF oDlg SIZE 80, 8
   
   @ 1.2, 1.5 GET cNombre OF oDlg
   
   @ 1.8, 3.3 BUTTON "Continuar" OF oDlg ACTION oDlg:End()
   
   ACTIVATE DIALOG oDlg CENTERED

   if ! Empty( cNombre )
      return FCreate( CurDir() + "\" + AllTrim( cNombre ) ) 
   endif   

return 0   
Image

Posted: Tue Apr 29, 2008 3:44 am
by Lupita
Hola Buenas tardes

Eso era lo que necesitaba hacer muchas gracias, le hice algunas modificaciones para q por default pusiera la extencion TXT al archivo y fuera creando un renglon por registo.

Solo tengo una duda que diferencia hay entre la instruccion RETURN NIL y RETURN 0.


@ 7, 2 BUTTON "Nvo Prod" SIZE 80, 20 ;
ACTION ( FWrite( hFile, AllTrim( cVar1 ) + "," + Str( nVar2, 8, 2 ) + "," + Str( nVar3, 8, 2 ) + CRLF ),;
cVar1 := Space( 20 ), nVar2 := 0.00, nVar3 := 0.00,;
oGet1:Refresh(), oGet2:Refresh(), oGet3:Refresh(), /* MiFuncionDeMedir(), */;
oGet1:SetFocus() )

@ 9, 2 BUTTON "Salir" SIZE 80, 20 ACTION oWnd:End()

ACTIVATE WINDOW oWnd ;
VALID MsgYesNo( "¿ Quiere terminar ?" ) ;
ON INIT hFile := PreguntaFichero( oWnd )

FClose( hFile )

return nil

function PreguntaFichero( oWnd )

local oDlg, cNombre := Space( 20 )

DEFINE DIALOG oDlg TITLE "Compra a" SIZE 190, 100 OF oWnd

@ 0.2, 2 SAY "Nombre:" OF oDlg SIZE 80, 8

@ 1.2, 1.5 GET cNombre OF oDlg

@ 1.8, 3.3 BUTTON "Continuar" OF oDlg ACTION oDlg:End()

ACTIVATE DIALOG oDlg CENTERED

if ! Empty( cNombre )
return FCreate( CurDir() + "\" + Alltrim( cNombre ) + ".txt")
endif

return 0

Posted: Tue Apr 29, 2008 7:37 am
by Antonio Linares
return 0 devuelve el número cero.

return nil devuelve un valor "nil". Consulta la documentación del lenguaje Clipper :-)

Posted: Tue Apr 29, 2008 2:45 pm
by Lupita
Ok, muchas gracias.

Saludos!

:D