Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[BCB] Rad sa AnsiString-ovima

[es] :: C/C++ programiranje :: [BCB] Rad sa AnsiString-ovima

[ Pregleda: 1627 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
92.55.109.*



+3 Profil

icon [BCB] Rad sa AnsiString-ovima12.11.2011. u 18:02 - pre 151 meseci
offtopic (ali da ne otvaram novu temu) zasto Bilder mi nedaje da odradim ovo

Code:

AnsiString a, b;

a=Edit1->Text;

for(int i=1; a.Lenght(); i++)
     b[i]=a[i];




[Ovu poruku je menjao ik0 dana 12.11.2011. u 19:41 GMT+1]
Kude tumbe i tri bandere
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 19:08 - pre 151 meseci
1. Length() umesto Lenght().
2. AnsiString b nema dužinu, i pri izvršavanju će se verovatno javiti greška.
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
92.55.109.*



+3 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 19:15 - pre 151 meseci
Utome je problem sto nakon izvrsenja se javlja greska zasto, kao sto me pamcenje sluzi u c++ nije bilo tako? Kako bi onda odradio ovaj deo koda

Code:

AnsiString pom, pom1;

pom=Edit1->Text;

        for(int i=1; i<pom.Length(); i++)
        {
            if(pom[i]!='/')
                pom1[i]=pom[i];
                   break;
        }

Kude tumbe i tri bandere
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 19:21 - pre 151 meseci
Ako želiš da b ima dužinu kao a, onda ti treba ovo:
Code:

a=Edit1->Text;
b.SetLength(a.Length()); // <---ovo


Eh, da... i ovo nije dobro:
Umesto
Citat:

Code:

for(int i=1; a.Length(); i++)


Treba:
Code:

for(int i=1; i<=a.Length(); i++)

Dakle, nemaš GRANICU!
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 19:24 - pre 151 meseci
Obrati pažnju na ovaj deo tvog koda:
i<pom.Length()

U njemu NE PRISTUPAŠ poslednjem elementu! Treba:
i<=pom.Length()



Obavezno pogledaj i ovu poruku:
http://www.elitesecurity.org/p792275
... tiče se INDEKSA u Borland C++ Builderu, što je delimično netipično za C++ zbog VCL biblioteke koja je ražena na Object Pascalu, koji ima neka drugačija pravila.
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
92.55.109.*



+3 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 19:33 - pre 151 meseci
Mislim da tako i radim sa indeksima. Ispravio sam gresku ali mislim da se nerazumemo gde je problem.

Code:

pom1[i]=pom[i]; //ovde "pukne" t.e ne da mi da uradim pom1[1]=pom[1];

Kude tumbe i tri bandere
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 19:39 - pre 151 meseci
Citat:

Code:

AnsiString pom, pom1;

 pom=Edit1->Text;

         for(int i=1; i<pom.Length(); i++)
         {
             if(pom[i]!='/')
                 pom1[i]=pom[i];
                    break;
         }



Code:

AnsiString pom, pom1;

 pom=Edit1->Text;
 pom1.SetLength(pom.Length()); // <---- ONO NISI DODAO
         for(int i=1; i<pom.Length(); i++) // <---- ONO NISI ISPRAVIO "<="
         {
             if(pom[i]!='/')
                 pom1[i]=pom[i];
                    break; // <--- OVO NIJE DOBRO, JER IZBACUJE IZ PETLJE ODMAH U PRVOM PROLAZU
         }


Inače, najbolje napiši šta treba uraditi. Ako želiš da neki znak u AnsiString izbaciš ili zameniš,ima gotovih funkcija.

AnsiReplaceStr(), AnsiReplaceText(), ...
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
92.55.109.*



+3 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 19:49 - pre 151 meseci
zelim ono sto je bilo u predhodnoj temi :). Znaci podatak koi je unesen u edit (format broj/godina) trebam odvoite broj od godinu onda neli da ih soberem (to sam smislio kako). Najednostavnii nacin (meni) je bio da ga predjem for ciklusom sve pre "/" da uzmem u jednu promenljivu sve posle "/" u drugu.
Kude tumbe i tri bandere
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 20:00 - pre 151 meseci
Ovako se možeš otarasiti znaka "/"
Code:

#include <StrUtils.Hpp>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        AnsiString ZaZamenu;
        ZaZamenu = AnsiReplaceStr( Edit1->Text, "/", "" );
        ShowMessage( ZaZamenu );
}


Ipak, to nije dobro rešenje, jer neko može uneti brojeve ovako:
11/2011
1120/2011
1120/11

i sl.

Zato je najbolje:
1. Ustanoviti poziciju znaka /
2. procitati znake levo
3. procitati znake desno
4. dodati 20 ili 2 ili nista ako se radi o godinama
5. dodati odgovarajuci broj nula ako se radi o brojevima
6. napraviti novi string sa okrenutim redosledom

Postoji i C funkcija:
http://www.cplusplus.com/reference/clibrary/cstring/strtok/
koja to može lako uraditi.


[Ovu poruku je menjao X Files dana 12.11.2011. u 21:17 GMT+1]
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 21:36 - pre 151 meseci
U principu, pokušaj neki ovakav kod (koga treba još zategnuti i testirati):
Code:

AnsiString BrojFakture2Timestamp( const AnsiString BrojFakture )
{
        AnsiString LEVO = LeftStr( BrojFakture, AnsiPos("/", BrojFakture)-1 );
        AnsiString DESNO = RightStr( BrojFakture, BrojFakture.Length()-LEVO.Length()-1 );


        // Dodaje potreban broj nula
        AnsiString BROJ = "00000";
        int PozicijaOdKojeSeUpisuje = BROJ.Length()-LEVO.Length()+1;
        for (int i=PozicijaOdKojeSeUpisuje; i<=BROJ.Length(); i++)
                BROJ[i] = LEVO[i-PozicijaOdKojeSeUpisuje+1];


        // Dodaje potrebne brojeve na kraj
        AnsiString GODINA;
        if ( DESNO.Length() == 2 )
                GODINA = "20" + DESNO;
        else // ovde možda još uslova...
                GODINA = DESNO;


        return ( GODINA + BROJ );

}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        ShowMessage( BrojFakture2Timestamp("11/2011") );
        ShowMessage( BrojFakture2Timestamp("1120/2011") );
        ShowMessage( BrojFakture2Timestamp("1120/11") );
}

 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
92.55.109.*



+3 Profil

icon Re: [BCB] Rad sa AnsiString-ovima12.11.2011. u 22:48 - pre 151 meseci
evo ja kako sam uradio...duze je jer ima validacija dosta...

1 primer
Code:

AnsiString pom, pom1, pom2, pom3, pom4;
int b=0, c=0;

if(Edit1->Text!="")
if(Edit1->Text.Length()>=4)
{
pom=Edit1->Text;

        for(int i=1; i<=pom.Length(); i++)
        {
            if(pom[i]=='/')
            {
                b=i; c++;
            }
        }

        if((b>1) && (b<8) && (c==1)&& (pom.Length()-b>=2) && (pom.Length()-b<=4) )
        {                                                        
            pom1.SetLength(b-1);                                 
                for(int i=1; i<b; i++)    
                    pom1[i]=pom[i];            
                    switch(b-1)           
                    {
                        case 1: pom3="00000"; pom3=pom3+pom1; 
                        break;
                        case 2: pom3="0000"; pom3=pom3+pom1;
                        break;
                        case 3: pom3="000"; pom3=pom3+pom1;
                        break;
                        case 4: pom3="00"; pom3=pom3+pom1;
                        break;
                        case 5: pom3="0"; pom3=pom3+pom1;
                        break; 
                        case 6: pom3=pom1;
                        
                    }

            pom2.SetLength(pom.Length()-b);
                for(int j=1, i=b+1; i<=pom.Length(); j++, i++)
                    pom2[j]=pom[i];
                switch((pom.Length()-b))
                {
                    case 2: pom4="20"; pom4=pom4+pom2;
                    break;
                    case 3: pom4="2"; pom4=pom4+pom2;
                    break;
                    case 4: pom4=pom2;
                    break;                
                }

        }
        else
        {
            ShowMessage("Greska pri vnesuvanje \nVnesi ponovo vo format (broj/godina)");
        }
}
else 
Beep();


2 primer nesta matematicki sam izvodio
Code:

AnsiString pom;
char c;
int a, d, des, h;
pom=Edit1->Text;


if(Edit1->Text!="")
    {
        for(int i=1; i<pom.Length(); i++)
            if(pom[i]=='/')
                pom1=i;
                a=atoi(pom1.c_str());
                d=0;
                h=0;
        for(int i=1,j=a-2; i<a; i++,j--)
        {
        des=pow(10,j);
        d+=(des*(pom[i]-48));
        }
        for(int i=a+1,j=pom.Length()-a-1; i<=pom.Length(); i++,j--)
        {
        des=pow(10,j);
        h+=(des*(pom[i]-48));
        }
    }
if (h/100==0)
{
h=2000+h;
}
//i tu sam stao pa poceo ono gore 

Kude tumbe i tri bandere
 
Odgovor na temu

[es] :: C/C++ programiranje :: [BCB] Rad sa AnsiString-ovima

[ Pregleda: 1627 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.