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

📄 korisno.h

📁 load data from pc to hand held terminal and vice versa
💻 H
字号:
/*
    Klasa sa korisnim procedurama koje se koriste u raznim drugim klasama.
    Klasa je 'singleton': pristup procedurama se vrsi preko pointera 'KKorisno::Instance()'.
*/
#ifndef KORISNO_H
#define KORISNO_H
#include <string>
#include <vector>
using namespace std;

//******************************* Deklaracije << BEGIN >> *******************************
//      - enumeracije
enum    IzuzetakID;
enum    UIFormat;
//      - kalse
class   KIzuzetak;
class   KKorisno;
class   KString;
//      - tipovi
typedef vector<KString>                 TListaStringova;
//      - konstante
const string        RAZMACI = " \t";
//******************************** Deklaracije << END >> ********************************

// ID-ovi izuzetaka
enum IzuzetakID{    CIFRA_VAN_OSNOVE
               };

// Klasa koja se koristi u izuzecima ( exception )
class KIzuzetak{
public:
    KIzuzetak( void ){}
    KIzuzetak( IzuzetakID ident ) : ID( ident ) { }

    IzuzetakID DajID( void ){ return ID; }

private:
    IzuzetakID ID;
};

// Tipovi formata stringova ( prefiks FS od 'Format Stringa' )
enum UIFormat           { FS_BCD_ASCII = 1, // bajt se cita/pise kao 2 ASCII znaka ( "00" - "FF" )
                          FS_BAJT           // bajt se cita/pise bezi ikakvih modifikacija
                        };

// Klasa sa korisnim procedurama za rad sa stringovima.
// Takodje, klasa sluzi za pravljenje vektora od stringova(TListaStringova).
// ( ako stavim direktno vector<string>, dobijam 'Warning' od kompajlera ).
class KString{
public:
    string  cString;

    // Konstruktori
    KString( string cSadrzaj );
    KString( void );

    // Operator pristupa elementu stringa
    char& operator[] ( unsigned int nPos );

    // Operator +=
    KString& operator+=( const KString& s );

    // Vraca duzinu stringa
    unsigned int size( void ) const;

    // Vraca podstring, od pozicije nPozicija, duzine nDuzina
    KString substr( unsigned int nPozicija, unsigned int nDuzina ) const;

    // Vraca indeks prvog elementa stringa koji nije razmak ili tabulator, racunajuci od date pozicije.
    unsigned int PreskociRazmake( unsigned int nPozicija=0 );

    // Vraca indeks prvog elementa stringa koji je razmak ili tabulator, racunajuci od date pozicije.
    unsigned int PreskociDoPrvogRazmaka( unsigned int nPozicija=0 );

    // Izdvaja 'rec'( deo stringa koji ne sadrzi ramake ) pocev od date pozicije.
    // Vraca prvu poziciju iza nadjene reci.
    unsigned int IzdvojiRec( unsigned int nPozicija, string& cRec );

    // Dopunjava string datim znakom sleva, do zadate duzine
    // Ukoliko je string vece duzine od nDuzina, vrsi se odsecanje na zadatu duzinu.
    KString lpad( unsigned char cZnak, unsigned int nDuzina );

    // Dopunjava string datim znakom zdesna, do zadate duzine;
    // Ukoliko je string vece duzine od nDuzina, vrsi se odsecanje na zadatu duzinu.
    KString rpad( unsigned char cZnak, unsigned int nDuzina );

    // Prevodi string u velika slova; 
    // ako je 'bKonvertUSpecZnak = true' vrsi i konverziju u specijalni kod
    KString ToUpper( bool bKonvertUSpecZnak = false );

    // Proverava da li je string decimalni broj
    bool IsDigit( void );
};

// Klasa sa raznim korisnim procedurama
class KKorisno {
public:
    // Procedura za pristup jedinom objektu klase
    static KKorisno* Instance( void );

    // Za dati bajt, funkcija vraca string od 2 ASCII znaka ( "00" - "FF" ); Koristi se kod ispisa u BCD formatu.
    char* BajtUBCD_ASCII( unsigned char bajt, char* str );

    // Za dati ASCII znak koji predstavlja HEX cifru ( '0'-'F' ), funkcija vraca celobrojnu vrednost ( 0-16 ).
    unsigned char ASCIIHEXuBajt( char znak );

    // Za dati string od 1 ili 2 ASCII znaka ( "00" - "FF" ) vraca celobrojnu vrednost ( 0 -255 ).
    unsigned char BCDuBajt( char* str );

    // Za dati string od 1 ili 2 ASCII znaka ( "00" - "FF" ) vraca celobrojnu vrednost ( 0 -255 ).
    unsigned char BCDuBajt( string str );

    // Vraca 'formatiranu' verziju datog stringa ( prevodi bajtove u oblik pogodan za ispis ).
    string FormatString( string cString, UIFormat format = FS_BCD_ASCII, bool bSaRazmacima = true );

    // Vraca 'deformatiranu' verziju datog stringa ( oblik pogodan za ispis prevodi u bajtove ).
    string DeformatString( KString cUlazniStr, UIFormat format = FS_BCD_ASCII );

    // Konvertuje dati string u integer.
    // Podrazumeva da je string sastavljen od niblova u datoj osnovi
    // ( npr. za osnovu 16, niblovi su 0-F ).
    // Ako je bIzuzetak = true, proverava da li niblovi odgovaraju datoj osnovi i
    // baca izuzetak ako ne odgovaraju.
    unsigned int KonvertUInt( string cStr, unsigned int nOsnova = 16, bool bIzuzetak = false );

    // Konvertuje dati BCD string u integer.
    // Podrazumeva da je string sastavljen od niblova 0-9 ( osnova 10 ).
    // Ako je bIzuzetak = true, proverava da li su niblovi dekadne cifre i baca izuzetak ako nisu.
    unsigned int KonvertBCDUInt( string cStr, bool bIzuzetak = false );

    // Konvertuje ceo broj( integer ) u string sastavljen od niblova u odgovarajucoj osnovi.
    // Na primer, za nOsnova = 16, niblovi su 0-F. 
    // Dopunjava vodecim nulama do date duzine.
    KString KonvertIntUNiblString( unsigned int nInt, unsigned int nDuzina, unsigned int nOsnova = 16 );

    // Konvertuje ceo broj( integer ) u BCD string ( string sastavljen od niblova 0-9 ).
    // Dopunjava vodecim nulama do date duzine.
    KString KonvertIntUBCD( unsigned int nInt, unsigned int nDuzina );

    // Konvertuje integer u string date duzine ( vrsi odsecanje ako je integer duzi ).
    // Ako je bDopuni=true, dopunjava vodecim nulama.
    string KonvertIntUString( unsigned int nInt, unsigned int nDuzina, bool bDopuni=true );

    // Konvertuje string sa BCD ciframa u realan broj.
    // Ako je bIzuzetak = true, proverava da li su niblovi dekadne cifre ( 0-9 ) 
    // i baca izuzetak ako nisu.
    double BCDStringUDouble( string cStr, unsigned char nBrojDecimala, bool bIzuzetak = false );

    // Konvertuje bool u string ( 'true' i 'false' )
    string BoolToString( bool bBool );

    // Konvertuje string u bool : ako je string 'true' konvertuje ga u true, ostalo u false
    bool StringUBool( string cStr );

    // Grupu BCD cifara konvertuje u niz brojeva tipa 'double'.
    // Zadaje se broj brojeva, duzina ( u bajtovima ) jednog broja i 
    // broj BCD cifara iza decimalne tacke.
    // U slucaju da konverzija nekog broja ne uspe, vraca false.
    // Preko promenljive nBrojIzdvojenihPodataka vraca broj double
    // brojeva izdvojenih iz ulaznog stringa ( moze da bude
    // manje od nTrazeniBrojPodataka ).
    bool StringUNizDouble( const string&    cKorisniPodaci, 
                           unsigned int     nTrazeniBrojPodataka, 
                           int              nDuzinaPodatka, 
                           int              nBrojBCDDecimala,
                           double*          nDoubleNiz,
                           unsigned int&    nBrojIzdvojenihPodataka );

private:
    // Posto je klasa singlton, konstruktor je privatni
    KKorisno( void ){}
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -