[Delphi] Jak vybrat jen urcite znaky z promenne string?

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod johnny600 10. 8. 2012 20:32

Ahoj,

mam dejme tomu promennou

Kód: Vybrat vše
var
neco:string;

begin
neco:= 'abcd-1000';
end;


jak odfiltruji abcd- ,aby mi pak v promenne zbylo jen 1000 , nebo jeste lepe dejme tomu ze znaku pred tou cislici 1000 nemusi byt vzdy pouze pet ale pokazde jinny pocet?

diky
johnny600
Junior

Odeslat příspěvekod Xenik 10. 8. 2012 21:03

Sice jsem naposledy dělal v pascalu na střední, ale k tomu co chceš se často používají regulérní výrazy (zkus google "delphi regexp"), případně si můžeš udělat sám jednoduchý stavový automat, který pozná, kdy končí písmena a kdy začínají čísla a až v tu chvíli začne vracet čísla.
Sorry že nepomůžu s žádným řešením kódu, ale snad to aspoň trošku pomůže.
Good luck.

edit: případně tohle vypadá asi použitelně :-) odstraní všechno co není číslo ze stringu. Otázkou je jestli ti to pomůže, jelikož si uvedl jen jeden příklad, ale pokud budou mít všechny stringy tenhle formát, tak by to chodit mělo. http://www.delphitricks.com/source-code/strings/extract_numbers_from_a_string.html
Xenik
Junior

Odeslat příspěvekod johnny600 11. 8. 2012 00:12

uz sem na netu hledal ale nic co by to resilo jsem nenasel...

pro upresneni retezec ve stringu se bude menit.

dejme tomu ze bude mit ale pokazde stejnou delku tzn. ctyri znaky(cisla i pismena) pak pomlcka a za ni nejaky pocet cislic.

me jde o to odfiltrovat prvnich pet znaku ,tak aby pokazde zbylo jenom to co je za pomlckou
johnny600
Junior

Odeslat příspěvekod Xenik 11. 8. 2012 01:06

Tak to použij ty regulérní výrazy nebo si přečti tuto stránku http://www.delphipages.com/forum/showthread.php?t=182480. Případně is na to snadno můžeš napsat vlastní metodu. To co chceš je relativně jednoduchý úkol, který by měl zvládnout kdekdo. Teda za předpokladu stálého formátu řetězce.
Xenik
Junior

Odeslat příspěvekod shmoula81 11. 8. 2012 01:31

Část stringu od pevně dané pozice do konce:
Kód: Vybrat vše
s1 := Copy(s, 6, MaxInt);


Část stringu za první pomlčkou:
Kód: Vybrat vše
s1 := Copy(s, Pos('-', s) + 1, MaxInt);
shmoula81
Junior

Odeslat příspěvekod johnny600 11. 8. 2012 14:26

jj, to je ono ;-) dik

Kód: Vybrat vše
s1 := Copy(s1, Pos('-', s1) + 1, MaxInt);
johnny600
Junior

Odeslat příspěvekod Dlabakan 19. 8. 2012 18:58

Zdravím.
Takto od začatku po první mezeru
b:= Copy(a, 1, Pos(' ', a)-1);

Jak však vyřešit, když chci od začatku po druhou nezeru.

Nebo z prave strany (od konce) po první mezeru.
Dlabakan
Junior

Odeslat příspěvekod JanFiala 20. 8. 2012 10:28

Dlabakan píše:Zdravím.
Takto od začatku po první mezeru
b:= Copy(a, 1, Pos(' ', a)-1);

Jak však vyřešit, když chci od začatku po druhou nezeru.

Nebo z prave strany (od konce) po první mezeru.


Mas několik možností:
1. použiješ funkci PosEx() + cyklus nebo volani 2x
2. pouřiješ funkci Pos() a po prvním nalezení di odsekneš počet znaků a nyní už zkopíruješ pomocí Copy() prvni mezeru
3. použiješ cyklus FOR, ve kterém si najdeš příslušný počet mezer a budeš znát pozici

Co se týká nalezení poslední mezery, používá se obrácení řetězce funkce jako Reverze a pak hledání první mezery. Následně opět otočení řetězce zpět.
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník