El nombre de un archivo puede ser variable?

Post Reply
Lupita
Posts: 13
Joined: Wed Apr 09, 2008 4:46 pm

El nombre de un archivo puede ser variable?

Post 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() )
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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 ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
Lupita
Posts: 13
Joined: Wed Apr 09, 2008 4:46 pm

Post 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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Lupita
Posts: 13
Joined: Wed Apr 09, 2008 4:46 pm

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

return 0 devuelve el número cero.

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

Antonio Linares
www.fivetechsoft.com
Lupita
Posts: 13
Joined: Wed Apr 09, 2008 4:46 pm

Post by Lupita »

Ok, muchas gracias.

Saludos!

:D
Post Reply