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:
parent
d96d30d323
commit
4e71de7064
166
ba/bacnvid.cpp
166
ba/bacnvid.cpp
@ -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;
|
||||||
@ -225,7 +203,7 @@ int TIsam_date_converter::Iconvert_file(int logicnum)
|
|||||||
r.get(logicnum);
|
r.get(logicnum);
|
||||||
RecDes *rd=r.rec();
|
RecDes *rd=r.rec();
|
||||||
const int nflds = r.fields();
|
const int nflds = r.fields();
|
||||||
const int nkeys = r.keys();
|
const int nkeys = r.keys();
|
||||||
|
|
||||||
dir.get(logicnum);
|
dir.get(logicnum);
|
||||||
if (dir.len() == 0 || nflds < 1 || nkeys < 1) return 0;
|
if (dir.len() == 0 || nflds < 1 || nkeys < 1) return 0;
|
||||||
@ -238,24 +216,52 @@ int TIsam_date_converter::Iconvert_file(int logicnum)
|
|||||||
if (fexist(old))
|
if (fexist(old))
|
||||||
{
|
{
|
||||||
f.open(old);
|
f.open(old);
|
||||||
{
|
{
|
||||||
TSystemisamfile newfile(logicnum);
|
TSystemisamfile newfile(logicnum);
|
||||||
if (newfile.build(10) != NOERR)
|
|
||||||
fatal_box("Non riesco a creare il file %s : errore n. %d", fp, newfile.status());
|
if (newfile.build(10) != NOERR)
|
||||||
}
|
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 (i = 1; newfile.good() && i <= dir.eod(); 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++)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user