📄 preuzimanjepodatakadlg.cpp
字号:
CRucniTerminalApp::OdvojiDatotekuOdStaze( m_NazivDatoteke, cNazivDatoteke, cStaza );
if ( cNazivDatoteke != "" ) bNastavi = true;
else {
PorukaID = IDS_NAZIV_DATOTEKE_OBAVEZAN;
bNastavi = false;
}
}
// Proveri da li je direktorijum OK i predji na njega
if ( bNastavi ) {
bool bPreso = true;
if ( cStaza != "" )
if ( _chdir( cStaza ) == -1 ) bPreso = false;
if ( !bPreso ) {
PorukaID = IDS_NEMA_DIREKTORIJUM;
bNastavi = false;
}
}
// Procitaj spisak brojila sa rucnog terminala
TSpisakBrojila spisakBrojila;
if ( bNastavi ){
BeginWaitCursor();
string cKorisniPodaci;
if ( KKomunikator::Instance()->OcitajSpisakBrojila( cKorisniPodaci ) ) {
KInterpret::Instance()->IzdvojiSpisakBrojila( cKorisniPodaci, admInf, spisakBrojila );
}
else {
PorukaID = IDS_PREUZIMANJE_NEUSPELO;
bNastavi = false;
}
EndWaitCursor();
}
// Ako datoteka ne postoji, kreira je, a ako postoji, brise stari sadrzaj
ofstream izlazniFajl;
if ( bNastavi ) {
izlazniFajl.open( cNazivDatoteke, ios::in | ios::trunc );
if ( izlazniFajl.is_open() ) {
izlazniFajl.close();
}
else {
PorukaID = IDS_NEMA_FAJL;
bNastavi = false;
}
}
// Proveri da li se radi o nastavku prethodnog prenosa
unsigned int nSBrBrojilaPrekida;
bool MogucNastavakPrenosa;
if ( bNastavi ) {
BeginWaitCursor();
MogucNastavakPrenosa = ProveriPrekid( admInf.nSerijskiBrojTerminala,
spisakBrojila.size(),
cNazivDatoteke,
nSBrBrojilaPrekida );
EndWaitCursor();
}
// Trazi potvrdu od korisnika
bool bNastavakPrenosa = false;
if ( bNastavi ){
if ( MogucNastavakPrenosa ) {
// Ako je moguc nastavak prenosa, pitaj korisnika da li zeli da nastavi ili
// da prenese sve ispocetka
if ( pRTApp->PrikaziPitanjeONastavku() != IDCANCEL ) {
bNastavakPrenosa = pRTApp->NastaviPrenos();
}
else {
bOdustao = true;
bNastavi = false;
}
}
else {
// Ako nije moguc nastavak prenosa, samo pitaj korisnika za potvrdu
if ( !( pRTApp->PrikaziSigurnosnoPitanje( IDS_SIGUR_PITANJE ) == IDOK ) ) {
bOdustao = true;
bNastavi = false;
}
}
}
// Ako je sve u redu, preuzmi podatke sa rucnog terminala
if ( bNastavi ){
// Otvori datoteku ili za dodavanje ili za prepisivanje
if ( bNastavakPrenosa )
izlazniFajl.open( cNazivDatoteke, ios::app );
else
izlazniFajl.open( cNazivDatoteke, ios::out );
// Preuzmi podatke sa rucnog terminala i upisi u datoteku
if ( izlazniFajl.is_open() ) {
PreuzmiPodatke( spisakBrojila, admInf, opisRT,
bNastavakPrenosa, nSBrBrojilaPrekida,
izlazniFajl, PorukaID );
izlazniFajl.close();
}
else{
PorukaID = IDS_NEMA_FAJL;
bNastavi = false;
}
}
if ( !bOdustao ) pRTApp->MyMessageBox( PorukaID );
}
void CPreuzimanjePodatakaDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
BOOL CPreuzimanjePodatakaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Postavi inicijalnu vrednost naziv datoteke
m_NazivDatoteke = KKonfig::Instance()->DajDatotekuZaPodatke().data();
CPreuzimanjePodatakaDlg::UpdateData( FALSE );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPreuzimanjePodatakaDlg::OnPrekiniPreuzimanje()
{
PrekiniPreuzimanje = true;
}
// Proverava da li je prilikom proslog preuzimanja podataka doslo do prekida
// i da li je moguce nastaviti prenos.
// Ako je moguce nastaviti prenos, vraca serijski broj brojila od kojeg se nastavlja prenos.
bool CPreuzimanjePodatakaDlg::ProveriPrekid( unsigned int nSerBrTerminala,
unsigned int nDuzinaSpiska,
const CString& cNazivDatoteke,
unsigned int& nSerBrBrojilaPrekida )
{
bool ImaNastavljanke = false;
// Promenljive sa podacima o prekidu
unsigned int nTip_prek;
unsigned int nSBrBrojila_prek;
unsigned int nDuzinaSpiska_prek;
unsigned int nSBrTerminala_prek;
// Najpre proveri da li postoji zapis o prekidu
if ( KKonfig::Instance()->ProcitajPodatkeOPrekidu( nTip_prek, nSBrBrojila_prek,
nDuzinaSpiska_prek, nSBrTerminala_prek ) )
{
// Zatim proveri da li se 'slazu' podaci o prekidu sa podacima koji se trenutno prenose
// Procitaj tip i serijski broj brojila koje je poslednje procitano iz datoteke sa podacima
EIDTipaBrojila tipBrojilaPom = TIP_BROJILA_NEPOZNAT;
unsigned int nSerijskiBrojPom = 98798798;
string cNapomenaPom;
ifstream fDatoteka;
fDatoteka.open( cNazivDatoteke, ios::in );
if ( fDatoteka.is_open() ) {
string cRed;
// Procitaj poslednji red u datoteci sa podacima
if ( ProcitajPoslednjiRed( fDatoteka, cRed ) ) {
EIDTipaBrojila tipBrojilaGlobal = TIP_BROJILA_NEPOZNAT;
KInterpret::Instance()->IzdvojiPodatkeOBrojilu( cRed, tipBrojilaGlobal,
tipBrojilaPom, nSerijskiBrojPom,
cNapomenaPom );
}
fDatoteka.close();
}
if ( tipBrojilaPom == nTip_prek
&& nSerijskiBrojPom== nSBrBrojila_prek
&& nDuzinaSpiska == nDuzinaSpiska_prek
&& nSerBrTerminala == nSBrTerminala_prek )
{
nSerBrBrojilaPrekida = nSBrBrojila_prek;
ImaNastavljanke = true;
}
}
return ImaNastavljanke;
}
// Funkcija za pozicioniranje na pocetak poslednjeg reda u datoteci
// U slucaju da ne postoji red teksta ( npr. datoteka je prazna ili se sastoji samo od belina )
// vraca false.
bool CPreuzimanjePodatakaDlg::ProcitajPoslednjiRed( ifstream& fDatoteka, string& cRed )
{
bool izlaz = false;
string cRedPom;
while ( getline( fDatoteka, cRedPom ) ){
cRed = cRedPom;
izlaz = true;
}
/*
// Pozicioniraj se na kraj datoteke
fDatoteka.seekg( 0, ios::end );
// Krecuci se unazad ( ka pocetku datoteke ), preskoci sve beline
long NovaPozicija;
long StaraPozicija = fDatoteka.tellg().get_fpos_t();
bool Belina = true;
bool ImaJosZnakova = true;
while ( Belina && ImaJosZnakova ){
// Proveri da li je tekuci znak belina ( white space )
int TekuciZnak = fDatoteka.peek();
if ( !( isspace( TekuciZnak ) || TekuciZnak == EOF ) ) {
Belina = false;
}
// Pomeri se na prethodni znak u datoteci
if ( Belina ) {
fDatoteka.seekg( -1, ios::cur );
NovaPozicija = fDatoteka.tellg().get_fpos_t();
if ( NovaPozicija == StaraPozicija ){
ImaJosZnakova = false;
}
StaraPozicija = NovaPozicija;
}
}
// Nastavi sa kretanjem unazad dok ne naidjes na 'end of line'
bool KrajLinije = false;
const int CARRIAGE_RETURN = 13;
const int LINE_FEED = 10;
while ( !KrajLinije && ImaJosZnakova ){
// Proveri da li je tekuci znak LF
int TekuciZnak = fDatoteka.peek();
if ( TekuciZnak == LINE_FEED ) {
// Proveri da li je pre toga CR
fDatoteka.seekg( -1, ios::cur );
NovaPozicija = fDatoteka.tellg().get_fpos_t();
TekuciZnak = fDatoteka.peek();
if ( TekuciZnak == CARRIAGE_RETURN ){
KrajLinije = true;
}
}
// Pomeri se na prethodni znak u datoteci
if ( !KrajLinije ) {
fDatoteka.seekg( -1, ios::cur );
NovaPozicija = fDatoteka.tellg().get_fpos_t();
if ( NovaPozicija == StaraPozicija ){
ImaJosZnakova = false;
}
StaraPozicija = NovaPozicija;
}
}
// Ako je naso 'end of line', pozicionira iza njega
if ( KrajLinije ){
fDatoteka.seekg( 2, ios::cur );
// Procitaj poslednji red
if ( getline( fDatoteka, cRed ) ){
izlaz = true;
}
}
*/
return izlaz;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -