⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preuzimanjepodatakadlg.cpp

📁 load data from pc to hand held terminal and vice versa
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        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 + -