Correzione alla conversione delle date e dei booleani (effettuata in un unico passo)

git-svn-id: svn://10.65.10.50/trunk@1552 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1995-07-04 15:00:38 +00:00
parent d96d30d323
commit 4e71de7064

View File

@ -18,8 +18,6 @@ extern "C" {
byte m1[12] = {31,28,31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; byte m1[12] = {31,28,31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int m2[12] = {31,59,90,120,151,181,212,243,273,304,334,365}; int m2[12] = {31,59,90,120,151,181,212,243,273,304,334,365};
enum what {_date,_isam};
HIDDEN int CGetField(const char *fieldname,RecDes* recd,RecType recin,long* d) HIDDEN int CGetField(const char *fieldname,RecDes* recd,RecType recin,long* d)
{ {
@ -50,7 +48,8 @@ HIDDEN int CGetField(const char *fieldname,RecDes* recd,RecType recin,long* d)
else strcpy(s, ""); else strcpy(s, "");
if (recd->Fd[p].TypeF == _datefld) if (recd->Fd[p].TypeF == _datefld)
{ {
if (strlen(s)) *d=atol(s); if (strlen(s))
*d=atol(s);
else *d=0; else *d=0;
} }
return (0); return (0);
@ -70,10 +69,9 @@ protected:
virtual bool create () ; virtual bool create () ;
virtual bool destroy(); virtual bool destroy();
void update(); void update();
void Iupdate_dir(); void update_dir();
void convert_dir(const what conversion); void convert_dir();
int Iconvert_file(int logicnum); int convert_file(int logicnum);
void Dconvert_file(int logicnum);
public: public:
TIsam_date_converter() {} TIsam_date_converter() {}
@ -107,14 +105,14 @@ void TIsam_date_converter::update()
begin_wait(); begin_wait();
// Converte i files in formato DBIII, FOXPRO... // Converte i files in formato DBIII, FOXPRO...
prefix().set(""); prefix().set("");
Iupdate_dir(); update_dir();
set_autoload_new_files(FALSE);
prefix().set("com"); prefix().set("com");
Iupdate_dir(); update_dir();
convert_dir(_isam); convert_dir();
TLocalisamfile ditte(LF_NDITTE); TLocalisamfile ditte(LF_NDITTE);
set_autoload_new_files(FALSE);
for (ditte.first(); !ditte.eof(); ditte.next()) for (ditte.first(); !ditte.eof(); ditte.next())
{ {
const long codditta = ditte.get_long("CODDITTA"); const long codditta = ditte.get_long("CODDITTA");
@ -123,23 +121,8 @@ void TIsam_date_converter::update()
if (prefix().exist(codditta)) if (prefix().exist(codditta))
{ {
set_firm(codditta); set_firm(codditta);
Iupdate_dir(); update_dir();
convert_dir(_isam); convert_dir();
}
}
// Converte le date in ANSI.
prefix().set("com");
convert_dir(_date);
for (ditte.first(); !ditte.eof(); ditte.next())
{
const long codditta = ditte.get_long("CODDITTA");
const TRecnotype rec = ditte.recno();
if (prefix().exist(codditta))
{
set_firm(codditta);
convert_dir(_date);
} }
} }
@ -149,7 +132,7 @@ void TIsam_date_converter::update()
end_wait(); end_wait();
} }
void TIsam_date_converter::Iupdate_dir() void TIsam_date_converter::update_dir()
{ {
TDir d; TDir d;
@ -180,7 +163,7 @@ void TIsam_date_converter::Iupdate_dir()
} }
} }
void TIsam_date_converter::convert_dir(const what conversion) void TIsam_date_converter::convert_dir()
{ {
const TString pref(prefix().name()); const TString pref(prefix().name());
@ -206,16 +189,11 @@ void TIsam_date_converter::convert_dir(const what conversion)
const bool to_convert = (is_com ? d.is_com() : d.is_firm()); const bool to_convert = (is_com ? d.is_com() : d.is_firm());
if (to_convert) if (to_convert)
{ convert_file(i);
if (conversion == _isam)
Iconvert_file(i);
else
Dconvert_file(i);
}
} }
} }
int TIsam_date_converter::Iconvert_file(int logicnum) int TIsam_date_converter::convert_file(int logicnum)
{ {
TDir dir; TDir dir;
@ -240,22 +218,50 @@ int TIsam_date_converter::Iconvert_file(int logicnum)
f.open(old); f.open(old);
{ {
TSystemisamfile newfile(logicnum); TSystemisamfile newfile(logicnum);
if (newfile.build(10) != NOERR) if (newfile.build(10) != NOERR)
fatal_box("Non riesco a creare il file %s : errore n. %d", fp, newfile.status()); fatal_box("Non riesco a creare il file %s : errore n. %d", fp, newfile.status());
} }
TString s(80); TString s(80);
s.format("Aggiornamento archivio %s", fp);
TProgind p((long)(nitems ? nitems : 1), s, FALSE, TRUE, 70); s.format("Aggiornamento archivio %s", fp);
TProgind p((long)(nitems ? nitems : 1), s, TRUE, TRUE, 70);
TLocalisamfile newfile(logicnum); TLocalisamfile newfile(logicnum);
TToken_string ts(128); // Build token_string with the names of date fields and logical fields
TToken_string tslog(128);
TRecnotype i; TRecnotype i;
for (int j=0; j<r.fields(); j++)
if (rd->Fd[j].TypeF == _datefld)
ts.add(rd->Fd[j].Name);
else
if (rd->Fd[j].TypeF == _boolfld)
tslog.add(rd->Fd[j].Name);
const int tslog_items = tslog.items();
const int ts_items = ts.items();
for (i = 1; newfile.good() && i <= dir.eod(); i++) for (i = 1; newfile.good() && i <= dir.eod(); i++)
{ {
f.read(newfile.curr().string(),i); f.read(newfile.curr().string(),i);
if (newfile.curr().string()[0] == '\0') if (newfile.curr().string()[0] == '\0')
{
newfile.curr().recall(); newfile.curr().recall();
if (tslog_items > 0)
for (const char * field_name = tslog.get(0); field_name != NULL; field_name = tslog.get())
{
const TString16 value(newfile.curr().get_str(field_name));
newfile.put(field_name,value == "X");
}
if (ts_items > 0)
for (const char *field_name = ts.get(0); field_name != NULL; field_name = ts.get())
{
long wd;
CGetField(field_name,rd,newfile.curr().string(),&wd);
TDate d(wd);
newfile.put(field_name,d);
}
}
else else
newfile.curr().discard(); newfile.curr().discard();
if ((i % 50) == 0) p.setstatus((long)(i + 1)); if ((i % 50) == 0) p.setstatus((long)(i + 1));
@ -272,8 +278,8 @@ int TIsam_date_converter::Iconvert_file(int logicnum)
::remove(old); ::remove(old);
} }
else else
error_box("Errore nella conversione dell' archivio %s : n.ro %d", error_box("Errore nella conversione dell' archivio %s record %ld : n.ro %d",
fp, newfile.status()); fp, i, newfile.status());
} }
else else
{ {
@ -302,68 +308,6 @@ int TIsam_date_converter::Iconvert_file(int logicnum)
return err; return err;
} }
void TIsam_date_converter::Dconvert_file(int logicnum)
{
TDir dir;
TTrec r;
int err = NOERR;
r.get(logicnum);
RecDes *rd=r.rec();
const int nflds = r.fields();
const int nkeys = r.keys();
dir.get(logicnum);
if (dir.len() == 0 || nflds < 1 || nkeys < 1) return;
const TRecnotype nitems = dir.eod();
const char* file_name = dir.name();
TToken_string ts(128); // Build token_string with the names of date fields and logical fields
TToken_string tslog(128);
for (int j=0; j<r.fields(); j++)
if (rd->Fd[j].TypeF == _datefld)
ts.add(rd->Fd[j].Name);
else
if (rd->Fd[j].TypeF == _boolfld)
tslog.add(rd->Fd[j].Name);
if (ts.items() > 0 || tslog.items() > 0)
{
TString s(80);
s.format("Aggiornamento archivio %s", file_name);
TProgind p((long)(nitems ? nitems : 1), s, TRUE, TRUE, 70);
TLocalisamfile ifile(logicnum);
ifile.readat(1);
for (TRecnotype i = 1; ifile.good() && i <= ifile.items(); i++)
{
ts.restart();
tslog.restart();
for (int j=1; j <= ts.items(); j++)
{
const char* field_name=ts.get();
long wd;
CGetField(field_name,rd,ifile.curr().string(),&wd);
TDate d(wd);
ifile.curr().put(field_name,d);
}
for (j=1; j<= tslog.items(); j++)
{
const char* field_name=tslog.get();
TString value;
value=ifile.curr().get_str(field_name);
ifile.curr().put(field_name,value == "X");
}
ifile.rewriteat(i);
if (i < ifile.items())
{
ifile.readat(i+1);
if ((i %50) == 0) p.setstatus(i+1);
}
}
p.setstatus(nitems);
}
}
int main(int argc, char** argv) int main(int argc, char** argv)
{ {