Ovako imam da uradim validaciju teksta koi se nalazi u editu. Format koi bi tebao da bude je BROJ,000 (1,000) sto znaci da bi ja morala proveriti prvo dali ima zapirke i koliko ih ima, ako ima trebala bi da bude posle broja da nije " ,000" (naravno i da je jedna), ako je ima da je na "100," treba da doda "000" ako je "100,01" treba da doda "0"...nasla sam primere za funkciju StrScan koja nalazi karakter u stringu. ali i ne broj karaktera u tom stringu (valjda postoji i ta funkcija), treba mi i funkcija koja bi mi dala vrednost sve posle "," na desno...Da ne bi radila ovo "pesacke" sa ciklusima i tako to ako moze neko da mi pomogne oko te funkcije. Hvala
[bcb] rad sa stringovima (pronalazenje znaka, odredjivanje mesta posle znaka)
Zaključano
Zakačeno
a evo kako sam ja uradila, ali ovo mi se ne svidja mora da ima funkcije
u edit moze da se unese samo 0 - 9 i ','
u edit moze da se unese samo 0 - 9 i ','
Code:
AnsiString pom11 = Edit8->Text;
int poslezapirke = 0;
int brojzapirke = 0;
for( int i=1; i<=Edit8->Text.Length(); i++ )
{
if( pom11[i]==',' )
brojzapirke = brojzapirke + 1;
if( brojzapirke > 0)
poslezapirke = poslezapirke + 1;
}
if( brojzapirke > 1 )
Edit8->Text = Edit8->Text + "1,000";
else if( brojzapirke == 0 )
Edit8->Text = Edit8->Text + ",000";
else if( brojzapirke==1 )
{
if( (poslezapirke - 1) == 0 )
Edit8->Text = Edit8->Text + "000";
else if( (poslezapirke - 1) == 1 )
Edit8->Text = Edit8->Text + "00";
else if( (poslezapirke - 1) == 2 )
Edit8->Text = Edit8->Text + "0";
//else if( (poslezapirke - 1) == 3 )
else if( (poslezapirke - 1) > 3 ) //samo tu bi trebala opet da pravim validaciju neku da uzme broj zapirku i tri karaktera posle zapirke
Edit8->Text="1,000";
}
AnsiString pom11 = Edit8->Text;
int poslezapirke = 0;
int brojzapirke = 0;
for( int i=1; i<=Edit8->Text.Length(); i++ )
{
if( pom11[i]==',' )
brojzapirke = brojzapirke + 1;
if( brojzapirke > 0)
poslezapirke = poslezapirke + 1;
}
if( brojzapirke > 1 )
Edit8->Text = Edit8->Text + "1,000";
else if( brojzapirke == 0 )
Edit8->Text = Edit8->Text + ",000";
else if( brojzapirke==1 )
{
if( (poslezapirke - 1) == 0 )
Edit8->Text = Edit8->Text + "000";
else if( (poslezapirke - 1) == 1 )
Edit8->Text = Edit8->Text + "00";
else if( (poslezapirke - 1) == 2 )
Edit8->Text = Edit8->Text + "0";
//else if( (poslezapirke - 1) == 3 )
else if( (poslezapirke - 1) > 3 ) //samo tu bi trebala opet da pravim validaciju neku da uzme broj zapirku i tri karaktera posle zapirke
Edit8->Text="1,000";
}
BCB? Length f-ja?
Ne kapiram bas sta zelis da uradis; ako sam dobro razumeo treba da u EDIT boxu bude samo broj u formatu *,xxx (gde * moze biti bilo koji ceo broj, a xxx tri cifre od kojih bilo koja moze biti 0)?
Posto delovima stringa mozes pristupiti kao karakterima a mozes index stringa iskoristiti kao string uvek mozes da uradis sub-string search. U prevodu:
i = Pos(';', Edit->Text);
j = Pos(';', Copy(Edit->Text, i, MaxInt));
Ako je j <> 0 znaci da ima 2 ';'. Ako je i = 0 znaci da nema ';'.
Takodje postoji i zgodna f-ja Format (koja radi na slican nacin kao sprintf). Pa mozes nju da iskoristis i sve uradis u jedan/dva reda.
Ne kapiram bas sta zelis da uradis; ako sam dobro razumeo treba da u EDIT boxu bude samo broj u formatu *,xxx (gde * moze biti bilo koji ceo broj, a xxx tri cifre od kojih bilo koja moze biti 0)?
Posto delovima stringa mozes pristupiti kao karakterima a mozes index stringa iskoristiti kao string uvek mozes da uradis sub-string search. U prevodu:
i = Pos(';', Edit->Text);
j = Pos(';', Copy(Edit->Text, i, MaxInt));
Ako je j <> 0 znaci da ima 2 ';'. Ako je i = 0 znaci da nema ';'.
Takodje postoji i zgodna f-ja Format (koja radi na slican nacin kao sprintf). Pa mozes nju da iskoristis i sve uradis u jedan/dva reda.
izmenjeno 1 put, poslednji put sanivr 23.07.2012. u 21:07
Izmene poruke
- sanivr23.07.2012. u 21:07zapis iz teksta poruke
*.xxx gde * i x (0 - 9) je bilo koi broj. Ok je to, ali treba proveriti tacan broj znaka (u ovom slucaju ",")...spored ovog koda valjda se razume sto sam htela a evo i ispravke t.e ceo kod
Code:
AnsiString pom11 = Edit8->Text;
int poslezapirke = 0;
int mestozapirka = 0;
int brojzapirke = 0;
for( int i=1; i <= pom11.Length(); i++ )
{
if( pom11[i]==',' )
{
mestozapirka = i;
brojzapirke = brojzapirke + 1;
}
if( brojzapirke > 0)
{
poslezapirke = poslezapirke + 1;
}
}
if( brojzapirke > 1 )
Edit8->Text = "1,000";
else if( brojzapirke == 0 )
Edit8->Text = Edit8->Text + ",000";
else if( brojzapirke==1 )
{
if( (poslezapirke - 1) == 0 )
Edit8->Text = Edit8->Text + "000";
else if( (poslezapirke - 1) == 1 )
Edit8->Text = Edit8->Text + "00";
else if( (poslezapirke - 1) == 2 )
Edit8->Text = Edit8->Text + "0";
//else if( (poslezapirke - 1) == 3 )
else if( (poslezapirke - 1) > 3 )
{
Edit8->Text = "";
for( int i = 1; i <= ( mestozapirka + 3 ); i++ )
Edit8->Text = Edit8->Text + pom11[i];
}
}
AnsiString pom11 = Edit8->Text;
int poslezapirke = 0;
int mestozapirka = 0;
int brojzapirke = 0;
for( int i=1; i <= pom11.Length(); i++ )
{
if( pom11[i]==',' )
{
mestozapirka = i;
brojzapirke = brojzapirke + 1;
}
if( brojzapirke > 0)
{
poslezapirke = poslezapirke + 1;
}
}
if( brojzapirke > 1 )
Edit8->Text = "1,000";
else if( brojzapirke == 0 )
Edit8->Text = Edit8->Text + ",000";
else if( brojzapirke==1 )
{
if( (poslezapirke - 1) == 0 )
Edit8->Text = Edit8->Text + "000";
else if( (poslezapirke - 1) == 1 )
Edit8->Text = Edit8->Text + "00";
else if( (poslezapirke - 1) == 2 )
Edit8->Text = Edit8->Text + "0";
//else if( (poslezapirke - 1) == 3 )
else if( (poslezapirke - 1) > 3 )
{
Edit8->Text = "";
for( int i = 1; i <= ( mestozapirka + 3 ); i++ )
Edit8->Text = Edit8->Text + pom11[i];
}
}
Šta je zapirka?
Potpis
Tko leti vrijedi
zarez
Kod nije bash shvvatljiv :)
Daj malo konkretnih primera?
Daj malo konkretnih primera?
Validacija formata nekog teksta se relativno zgodno rešava regularnim izrazima. Problem je naravno što bcb ima samo suvu biblioteku PCRE.
Za validaciju bi trebalo koristiti ovaj izraz:
Dalje bi ti samo trebalo uputstvo kako se koristi PCRE u bcb-u, odnosno najvažnija funkcija pcre_compile .
na primer:
PCRE example
Za validaciju bi trebalo koristiti ovaj izraz:
Code:
^(\+|\-|)\d,\d{3}$
^(\+|\-|)\d,\d{3}$
Dalje bi ti samo trebalo uputstvo kako se koristi PCRE u bcb-u, odnosno najvažnija funkcija pcre_compile .
na primer:
PCRE example
Potpis
Tko leti vrijedi