Gerardo 2020-06-03 22:34:09 +02:00
commit baa2dabdf6
7 changed files with 134 additions and 23 deletions

View File

@ -327,7 +327,9 @@ void GdataTable::removeColm(int i)
default:
break;
}
colm.remove(i);
buf.remove(i);
colmName.borra(i);
}
//***************************************************************************
@ -467,6 +469,13 @@ char* GdataTable::getName( int icol )
return colmName.get(icol);
}
//***************************************************************************
bool GdataTable::rename(int icol, char *nomb)
{
if (icol<0 || icol>colm.n)
return 0;
return colmName.replace(icol,nomb);
}
//***************************************************************************
bool GdataTable::addMemRow( int nrow )
{
for(int i =0; i<buf.n; i++)

View File

@ -44,6 +44,7 @@ public:
int getSizeASCII(int icol);
char* getName(int icol);
bool rename(int icol, char* nomb);
int* getI(int row, int colm);
__int64* getI64(int row, int colm);
double* getD(int row, int colm);

View File

@ -22,31 +22,78 @@ bool ManagerDbfGdataTable::DbfSet( int nrow, int ncolm )
return true;
}
//***************************************************************************
bool ManagerDbfGdataTable::DelCol(char* path, char* name)
{
GdataTable tb;
if (path)
{
if (!LeeDbf(path, &tb))
return false;
_dt = &tb;
}
else if (!_dt)
{
return false;
}
int ic = _dt->getInd(name);
if (ic < 0)
{
return false;
}
_dt->removeColm(ic);
if (path)
{
if (!grabaDbf(path, _dt))
return false;
}
return true;
}
//***************************************************************************
bool ManagerDbfGdataTable::AddCol( char* path, char* name, BYTE type,IAddColDbf *dt, int size)
{
GdataTable tb;
if(!LeeDbf(path, &tb))
if (path)
{
if (!LeeDbf(path, &tb))
return false;
_dt = &tb;
}
else if(!_dt)
{
return false;
int ic=tb.getInd(name);
}
int ic= _dt->getInd(name);
if(ic<0)
{
//la crea
if(!tb.addColm(name,type,size))
if(!_dt->addColm(name,type,size))
return false;
ic=tb.nColm()-1;
ic= _dt->nColm()-1;
}
dt->size = tb.getSize(ic);
dt->size = _dt->getSize(ic);
for(int i=0;i<tb.nRow();i++)
for(int i=0;i< _dt->nRow();i++)
{
dt->setData(i, tb.get(i,ic));
dt->setData(i, _dt->get(i,ic));
}
if(!grabaDbf(path,&tb))
return false;
if (path)
{
if (!grabaDbf(path, _dt))
return false;
}
return true;
}

View File

@ -26,10 +26,11 @@ class UTILES_EXPORT ManagerDbfGdataTable: public ListenerDbf_W, public ListenerD
bool LeeDbf(char* path, GdataTable *dt);
bool grabaDbf(char* path, GdataTable *dt);
bool AddCol( char* path, char* name, BYTE type,IAddColDbf *dt, int size=0);
bool DelCol(char* path, char* name);
//funciones de herencia----------------------------------------
//LisenerDbf_R-------------------------------------------------
virtual bool DbfSet( int nrow, int ncolm );
virtual bool DbfSet( int nrow, int ncolm );
virtual bool DbfSetColm( char* name, BYTE type, int size );
virtual bool DbfaddVal( int icol, int v );
virtual bool DbfaddVal( int icol, double v );

View File

@ -164,4 +164,59 @@ StrArray* StrArray::filtra( StrArray*buf, char *filter )
}
return buf;
}
//***********************************************************************
BOOL StrArray::replace(int i, char* cadena)
{
if (i < 0 || i >= n_i)
return FALSE;
int dif = strlen(cadena) - strlen(get(i));
int aux = 1024;
int ult;
int i_i;
if (dif > 0)
{
//comprueba memo-------------------
if (n_str + dif >= m_str)
{
if (aux < dif)
aux += dif;
//pedir-----------------------
m_str = m_str + aux;
str = (char*)realloc(str, m_str);
memset(&str[m_str - aux], 0, aux);
}
//desplazar-----------------------
//ult=(*ind)[n_i-1]+strlen(dame_str(n_i-1))+1;
ult = n_str - 1;
if (i + 1 < n_i)
i_i = (*ind)[i + 1] - 1;
else
i_i = ult;
//i_i=(*ind)[i]+strlen(dame_str(i))+1;
//ult=strlen(&str[ult])+1;
for (int k = ult; k >= i_i; k--)
str[k + dif] = str[k];
//copiamos-----------------------
strcpy(get(i), cadena);
//aumentamos indices-------------
for (int k = i + 1; k < n_i; k++)
(*ind)[k] += dif;
}
else
{
strcpy(get(i), cadena);
}
return TRUE;
}
//***********************************************************************
int StrArray::find(char* st)
{
for (int i = 0; i < n_i; i++)
{
if (!strcmp(&str[(*ind)[i]], st))
return i;
}
return -1;
}
//**************************************************************************

View File

@ -29,6 +29,8 @@ public:
void borra();//borra todo
void compacta();//reduce al minimo la memoria necesaria para comtener la informacion
StrArray* filtra(StrArray*buf, char *filter);
BOOL replace(int i, char* cadena);
int find(char* st);
//funciones aux-------------------------
private:
void cuida_memoria(int n,int ni=1);//asegura tener memoria para un str mas

View File

@ -16,13 +16,11 @@
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
// Inglés (Estados Unidos) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
@ -30,8 +28,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,8
PRODUCTVERSION 1,0,0,8
FILEVERSION 1,0,0,9
PRODUCTVERSION 1,0,0,9
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -48,11 +46,11 @@ BEGIN
BEGIN
VALUE "CompanyName", "Narvaling"
VALUE "FileDescription", "Librería de utilidades"
VALUE "FileVersion", "1.0.0.8"
VALUE "FileVersion", "1.0.0.9"
VALUE "InternalName", "utiles.dll"
VALUE "OriginalFilename", "utiles.dll"
VALUE "ProductName", "Utiles"
VALUE "ProductVersion", "1.0.0.8"
VALUE "ProductVersion", "1.0.0.9"
END
END
BLOCK "VarFileInfo"
@ -61,18 +59,16 @@ BEGIN
END
END
#endif // English (U.S.) resources
#endif // Inglés (Estados Unidos) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Spanish resources
// Español (España, alfabetización internacional) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN)
#ifdef _WIN32
LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
@ -112,7 +108,7 @@ END
#endif // APSTUDIO_INVOKED
#endif // Spanish resources
#endif // Español (España, alfabetización internacional) resources
/////////////////////////////////////////////////////////////////////////////