First commit 27/02/2001
This commit is contained in:
		
							
								
								
									
										9
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
#ExpansorHTML 
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
*27/02/2001* 
 | 
			
		||||
 
 | 
			
		||||
ToDo: wwtcf? 
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										107
									
								
								expansor.bpr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								expansor.bpr
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,107 @@
 | 
			
		||||
<?xml version='1.0' encoding='utf-8' ?>
 | 
			
		||||
<!-- C++Builder XML Project -->
 | 
			
		||||
<PROJECT>
 | 
			
		||||
  <MACROS>
 | 
			
		||||
    <VERSION value="BCB.05.03"/>
 | 
			
		||||
    <PROJECT value="expansor.exe"/>
 | 
			
		||||
    <OBJFILES value="expansor.obj"/>
 | 
			
		||||
    <RESFILES value=""/>
 | 
			
		||||
    <IDLFILES value=""/>
 | 
			
		||||
    <IDLGENFILES value=""/>
 | 
			
		||||
    <DEFFILE value=""/>
 | 
			
		||||
    <RESDEPEN value="$(RESFILES)"/>
 | 
			
		||||
    <LIBFILES value=""/>
 | 
			
		||||
    <LIBRARIES value="vclbde50.lib vcldb50.lib vcl50.lib"/>
 | 
			
		||||
    <SPARELIBS value="vcl50.lib vcldb50.lib vclbde50.lib"/>
 | 
			
		||||
    <PACKAGES value=""/>
 | 
			
		||||
    <PATHCPP value=".;"/>
 | 
			
		||||
    <PATHPAS value=".;"/>
 | 
			
		||||
    <PATHRC value=".;"/>
 | 
			
		||||
    <PATHASM value=".;"/>
 | 
			
		||||
    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>
 | 
			
		||||
    <RELEASELIBPATH value="$(BCB)\lib\release"/>
 | 
			
		||||
    <LINKER value="ilink32"/>
 | 
			
		||||
    <USERDEFINES value=""/>
 | 
			
		||||
    <SYSDEFINES value="NO_STRICT"/>
 | 
			
		||||
    <MAINSOURCE value="expansor.cpp"/>
 | 
			
		||||
    <INCLUDEPATH value="$(BCB)\include;$(BCB)\include\vcl"/>
 | 
			
		||||
    <LIBPATH value="$(BCB)\lib\obj;$(BCB)\lib"/>
 | 
			
		||||
    <WARNINGS value="-w-par -w-8027 -w-8026"/>
 | 
			
		||||
    <WARNOPTSTR value=""/>
 | 
			
		||||
  </MACROS>
 | 
			
		||||
  <OPTIONS>
 | 
			
		||||
    <IDLCFLAGS value="-src_suffix cpp -I$(BCB)\include -I$(BCB)\include\vcl -boa"/>
 | 
			
		||||
    <CFLAG1 value="-Od -H=c:\PROGRAM\CBUILDER\CBUILD~1\lib\vcl35.csm -Hc -Vx -Ve -X- -r- -a8 
 | 
			
		||||
      -b- -k -y -v -vi- -c -tWC -Tkh30000 -tWM"/>
 | 
			
		||||
    <CFLAG2 value=""/>
 | 
			
		||||
    <CFLAG3 value=""/>
 | 
			
		||||
    <PFLAGS value="-$YD -$W -$O- -v -M -JPHNE"/>
 | 
			
		||||
    <RFLAGS value=""/>
 | 
			
		||||
    <AFLAGS value="/mx /w2 /zd"/>
 | 
			
		||||
    <LFLAGS value="-D"" -ap -Tpe -x -Gn -v"/>
 | 
			
		||||
    <IFLAGS value=""/>
 | 
			
		||||
  </OPTIONS>
 | 
			
		||||
  <LINKER>
 | 
			
		||||
    <ALLOBJ value="c0x32.obj $(OBJFILES)"/>
 | 
			
		||||
    <ALLRES value="$(RESFILES)"/>
 | 
			
		||||
    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>
 | 
			
		||||
  </LINKER>
 | 
			
		||||
  <IDEOPTIONS>
 | 
			
		||||
[Version Info]
 | 
			
		||||
IncludeVerInfo=0
 | 
			
		||||
AutoIncBuild=0
 | 
			
		||||
MajorVer=1
 | 
			
		||||
MinorVer=0
 | 
			
		||||
Release=0
 | 
			
		||||
Build=0
 | 
			
		||||
Debug=0
 | 
			
		||||
PreRelease=0
 | 
			
		||||
Special=0
 | 
			
		||||
Private=0
 | 
			
		||||
DLL=0
 | 
			
		||||
Locale=3082
 | 
			
		||||
CodePage=1252
 | 
			
		||||
 | 
			
		||||
[Version Info Keys]
 | 
			
		||||
CompanyName=
 | 
			
		||||
FileDescription=Executable (Console)
 | 
			
		||||
FileVersion=1.0.0.0
 | 
			
		||||
InternalName=
 | 
			
		||||
LegalCopyright=
 | 
			
		||||
LegalTrademarks=
 | 
			
		||||
OriginalFilename=
 | 
			
		||||
ProductName=
 | 
			
		||||
ProductVersion=1.0.0.0
 | 
			
		||||
Comments=
 | 
			
		||||
 | 
			
		||||
[HistoryLists\hlRunParameters]
 | 
			
		||||
Count=2
 | 
			
		||||
Item0=t tb_ref.db
 | 
			
		||||
Item1=t t 
 | 
			
		||||
 | 
			
		||||
[Debugging]
 | 
			
		||||
DebugSourceDirs=$(BCB)\source\vcl
 | 
			
		||||
 | 
			
		||||
[Parameters]
 | 
			
		||||
RunParams=
 | 
			
		||||
HostApplication=
 | 
			
		||||
RemoteHost=
 | 
			
		||||
RemotePath=
 | 
			
		||||
RemoteDebug=0
 | 
			
		||||
 | 
			
		||||
[Compiler]
 | 
			
		||||
ShowInfoMsgs=0
 | 
			
		||||
LinkDebugVcl=1
 | 
			
		||||
LinkCGLIB=0
 | 
			
		||||
 | 
			
		||||
[CORBA]
 | 
			
		||||
AddServerUnit=1
 | 
			
		||||
AddClientUnit=1
 | 
			
		||||
PrecompiledHeaders=1
 | 
			
		||||
 | 
			
		||||
[Language]
 | 
			
		||||
ActiveLang=
 | 
			
		||||
ProjectLang=
 | 
			
		||||
RootDir=
 | 
			
		||||
  </IDEOPTIONS>
 | 
			
		||||
</PROJECT>
 | 
			
		||||
							
								
								
									
										232
									
								
								expansor.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										232
									
								
								expansor.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,232 @@
 | 
			
		||||
#include <vcl\math.hpp>
 | 
			
		||||
#include <vcl\DB.hpp>
 | 
			
		||||
#include <vcl\DBTables.hpp>
 | 
			
		||||
 | 
			
		||||
#include <iostream.h>
 | 
			
		||||
#include <condefs.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <io.h>
 | 
			
		||||
 | 
			
		||||
#pragma hdrstop
 | 
			
		||||
 | 
			
		||||
int file_exists(char *filename);
 | 
			
		||||
void Expande( char *Texto, char *Origen );
 | 
			
		||||
int findTAG( FILE *handle, char *TAG );
 | 
			
		||||
char * scanUntil( char *text, char Terminador );
 | 
			
		||||
char * scanUntil( FILE *handle, char Terminador, char *buffer );
 | 
			
		||||
 | 
			
		||||
bool SinDecimales;
 | 
			
		||||
 | 
			
		||||
//---------------------------------------------------------------------------
 | 
			
		||||
#pragma argsused
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
 if ( argc < 3 )
 | 
			
		||||
 {
 | 
			
		||||
   cout << "Expansor de Datos\n";
 | 
			
		||||
   cout << "-----------------\n\n";
 | 
			
		||||
   cout << "Par<EFBFBD>metros insuficientes:  [documento_a_expandir] [origen_de_datos] \n\n";
 | 
			
		||||
   cout << "<EXT ID=\"campo del id\" IDV=\"valor de concordancia\" C=\"campo a mostrar\"></EXT>\n\n";
 | 
			
		||||
 } else {
 | 
			
		||||
 | 
			
		||||
     if ( argc == 4 ) SinDecimales = false; else SinDecimales = true;
 | 
			
		||||
 | 
			
		||||
     if ( !file_exists( argv[1] ) )
 | 
			
		||||
     {
 | 
			
		||||
       cout << "El documento a expandir no existe: " << argv[1];
 | 
			
		||||
     } else {
 | 
			
		||||
         if ( !file_exists( argv[2] ) )
 | 
			
		||||
         {
 | 
			
		||||
           cout << "El origen de datos no existe: " << argv[2];
 | 
			
		||||
         } else
 | 
			
		||||
           Expande( argv[1], argv[2] );
 | 
			
		||||
     }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
        return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int file_exists(char *filename)
 | 
			
		||||
{
 | 
			
		||||
   return (access(filename, 0) == 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
   <EXT ID="nombre del ID" IDV="valor que debe tener" C="campo de resultados"></EXT>
 | 
			
		||||
 | 
			
		||||
   opcionalmente:  F="1.16"  (factor de multiplicaci<63>n)
 | 
			
		||||
*/
 | 
			
		||||
void Expande( char *Texto, char *Origen )
 | 
			
		||||
{
 | 
			
		||||
   FILE *handle; char digit, buffer[80], *buff;
 | 
			
		||||
   AnsiString IDnombre, IDvalor, Campo_n, FactorM, dev;
 | 
			
		||||
   float Factor;
 | 
			
		||||
 | 
			
		||||
   buffer[79] = '\0';
 | 
			
		||||
 | 
			
		||||
   TTable *TbOrigen;
 | 
			
		||||
 | 
			
		||||
   TbOrigen = new TTable(0);
 | 
			
		||||
 | 
			
		||||
   TbOrigen->TableName = AnsiString( Origen );
 | 
			
		||||
   try {
 | 
			
		||||
       TbOrigen->Active = true;
 | 
			
		||||
   } catch(...) {
 | 
			
		||||
     puts( "\nERROR GRABE ABRIENDO ORIGEN\n" );
 | 
			
		||||
     return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   if ( (handle = fopen( Texto, "r") ) == NULL)
 | 
			
		||||
   {
 | 
			
		||||
      return;
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   while ( !feof( handle ) )
 | 
			
		||||
   {
 | 
			
		||||
     if ( findTAG( handle, "<EXT ID=\"" ) )
 | 
			
		||||
     {
 | 
			
		||||
       IDnombre = AnsiString( scanUntil( handle, '\"', buffer ) );
 | 
			
		||||
       findTAG( handle, "IDV=\"" );
 | 
			
		||||
       IDvalor = AnsiString( scanUntil( handle, '\"', buffer ) );
 | 
			
		||||
       findTAG( handle, "C=\"" );
 | 
			
		||||
       Campo_n = AnsiString( scanUntil( handle, '\"', buffer ) );
 | 
			
		||||
 | 
			
		||||
       scanUntil( handle, '>', buffer );    // Buscamos en buffer si hay par<61>metros opcionales
 | 
			
		||||
       FactorM = AnsiString( buffer );
 | 
			
		||||
       digit = FactorM.Pos( "F=\"" );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
       if ( TbOrigen->FindField( Campo_n ) == NULL )
 | 
			
		||||
       {
 | 
			
		||||
        dev =   "ERROR ACCEDIENDO AL DESTINO: " + Campo_n + " ";
 | 
			
		||||
       } else {
 | 
			
		||||
 | 
			
		||||
       // Buscamos en la base de datos y...
 | 
			
		||||
       try {
 | 
			
		||||
           if ( !TbOrigen->Locate( IDnombre, IDvalor, TLocateOptions() << loCaseInsensitive ) )
 | 
			
		||||
              dev = "Valor: " + IDvalor + " no encontrado en: " + IDnombre + " ";
 | 
			
		||||
       } catch(...) {
 | 
			
		||||
        dev =   "ERROR ACCEDIENDO AL CAMPO: " + IDnombre + " ";
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
       if ( digit )
 | 
			
		||||
       {
 | 
			
		||||
        StrLCopy( buffer, (FactorM.SubString( digit+3, FactorM.Length() - digit+1 ) ).c_str(), 79 );
 | 
			
		||||
        scanUntil( buffer, '\"' );
 | 
			
		||||
        try {
 | 
			
		||||
            Factor = atof( buffer );
 | 
			
		||||
        }catch(...){
 | 
			
		||||
         dev = "El campo FACTOR debe ser num<75>rico";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Aplicamos el Valor del campo deseado X el factor de escala
 | 
			
		||||
        try {
 | 
			
		||||
           if ( TbOrigen->FindField( Campo_n ) != NULL )
 | 
			
		||||
           {
 | 
			
		||||
               dev = TbOrigen->FieldByName( Campo_n )->AsString;
 | 
			
		||||
               if ( SinDecimales )
 | 
			
		||||
                   dev = FormatCurr( "###,###,##0;0; ", dev.ToDouble() * Factor );
 | 
			
		||||
                   //AnsiString( Ceil( dev.ToDouble() * Factor) );
 | 
			
		||||
               else
 | 
			
		||||
                   dev = FormatCurr( "###,###,###.#0;0; ", dev.ToDouble() * Factor );
 | 
			
		||||
           }
 | 
			
		||||
        } catch( ... ) {
 | 
			
		||||
            dev = "El campo: "+Campo_n+" no es NUMERICO ";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
       } else {
 | 
			
		||||
        //Soltamos el Valor del campo deseado
 | 
			
		||||
        if ( TbOrigen->FindField( Campo_n ) != NULL )
 | 
			
		||||
            dev = TbOrigen->FieldByName( Campo_n )->AsString;
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
        printf( "%s", dev.c_str() );
 | 
			
		||||
 | 
			
		||||
       findTAG( handle, "</EXT>" );
 | 
			
		||||
     }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   fclose(handle);
 | 
			
		||||
 | 
			
		||||
   TbOrigen->Active = false;
 | 
			
		||||
   delete TbOrigen;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char * scanUntil( FILE *handle, char Terminador, char *buffer )
 | 
			
		||||
{
 | 
			
		||||
 char digit;
 | 
			
		||||
 char *buff;
 | 
			
		||||
 int count;
 | 
			
		||||
 | 
			
		||||
 count = 0;
 | 
			
		||||
 buff = buffer;
 | 
			
		||||
 digit = fgetc( handle );
 | 
			
		||||
 while ( !feof( handle ) && digit != Terminador && count<32 )
 | 
			
		||||
 {
 | 
			
		||||
  *buff = digit;
 | 
			
		||||
  buff ++;
 | 
			
		||||
  count ++;
 | 
			
		||||
  digit = fgetc( handle );
 | 
			
		||||
 }
 | 
			
		||||
 *buff = '\0';
 | 
			
		||||
 | 
			
		||||
 return buffer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char * scanUntil( char *text, char Terminador )
 | 
			
		||||
{
 | 
			
		||||
 char *buff;
 | 
			
		||||
 | 
			
		||||
 buff = text;
 | 
			
		||||
 | 
			
		||||
 while ( *buff != '\0' && *buff != Terminador )
 | 
			
		||||
  buff++;
 | 
			
		||||
 | 
			
		||||
 *buff = '\0';
 | 
			
		||||
 | 
			
		||||
 return buff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int findTAG( FILE *handle, char *TAG )
 | 
			
		||||
{
 | 
			
		||||
  char digit; char *TAG2, *TAG3;
 | 
			
		||||
 | 
			
		||||
 do {
 | 
			
		||||
  TAG2 = TAG;
 | 
			
		||||
  digit = fgetc( handle );
 | 
			
		||||
  while( digit != *TAG2 && !feof(handle) )
 | 
			
		||||
  {
 | 
			
		||||
    fputchar( digit );
 | 
			
		||||
    digit = fgetc( handle );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  while( digit == *TAG2 && !feof( handle ) )
 | 
			
		||||
  {
 | 
			
		||||
    TAG2++;
 | 
			
		||||
    if ( *TAG2 != '\0' )
 | 
			
		||||
        digit = fgetc( handle );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( *TAG2 != '\0' )
 | 
			
		||||
  {
 | 
			
		||||
   TAG3 = TAG;
 | 
			
		||||
   while ( TAG3 != TAG2 )
 | 
			
		||||
   {
 | 
			
		||||
    fputchar( *TAG3 );
 | 
			
		||||
    TAG3++;
 | 
			
		||||
   }
 | 
			
		||||
   fputchar( digit );
 | 
			
		||||
   if ( feof( handle ) )
 | 
			
		||||
        return 0;
 | 
			
		||||
  } else {
 | 
			
		||||
     return 1;
 | 
			
		||||
  }
 | 
			
		||||
 } while( 1 );
 | 
			
		||||
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								expansor.exe
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								expansor.exe
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										17
									
								
								t
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								t
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
o
 | 
			
		||||
esto solo es una prueba <ex
 | 
			
		||||
para probar<exro <EXT ID="ID Producto" IDV="cjmtat" C="Nombre del Producto">buscar en la base de datos</EXT>ksldf
 | 
			
		||||
<extnew wt rtt
 | 
			
		||||
<ext fdgs<67> s<ext  fgd
 | 
			
		||||
ewrew
 | 
			
		||||
rewrewrew
 | 
			
		||||
rewr
 | 
			
		||||
<EXT ID="campo del id" IDV="valor de concordancia" C="campo a mostrar"></EXT>ewrew
 | 
			
		||||
rewrew
 | 
			
		||||
rewrew
 | 
			
		||||
rewr
 | 
			
		||||
<EXT ID="ID Producto" IDV="112" C="Nombre del Producto" F="1.16"></EXT>
 | 
			
		||||
ew
 | 
			
		||||
<EXT ID="ID Producto" IDV="112" C="Precio Venta 1" ></EXT>
 | 
			
		||||
sd
 | 
			
		||||
<EXT ID="ID Producto" IDV="112" C="Nombre del Producto" ></EXT> == <EXT ID="ID Producto" IDV="112" C="Precio Venta 1" F="1.16"></EXT>
 | 
			
		||||
		Reference in New Issue
	
	Block a user