Datuve :: Forums :: Arhīvs :: Delphi, izdzēst visus burtus un simbolus.

Datuve

Mana Datuve

Reģistrācija | Noteikumi | Paroles atjaunošana



Forums

Ieskaties


Raksti

Lietotāji online

Lietotāji online: 89

Reģistrētie lietotāji online: 0

Viesi online: 89

Datuve.lv video
Top.LV

Delphi, izdzēst visus burtus un simbolus.

Ievietoja: BlowMagnum @ 2009.04.10 23:21  

Tātad, ir uz Form1 ir TextBox1 kurā ir burti un dažādi simboli, piem, '< > / ' ; : utt

Mēģinu panākt to, lai pēc pogas nospiešanas(Button1) visi burti un simboli tiktu izdzēsti un paliktu tikai cipari.

Ideja bija to panākt ar StringReplace komandu, bet tas ir neparocīgi, jo komanda jāraksta katram burtam un simbolam atseviški, piem:


StringReplace(TextBox1.Text, ' a ', '  1 ',
                         [rfReplaceAll, rfIgnoreCase]);

StringReplace(TextBox1.Text, ' b ', '  2  ',
                         [rfReplaceAll, rfIgnoreCase]);

Kā varētu panākt, lai pēc pogas nospiešanas, TextBox1 pazustu visi burti un simboli, bet paliktu tikai cipari?

Komentāri:

#1 usver @ 2009.04.11 00:00

2 varianti:
1) realizēt ar regulārajām izteiksmēm ( regular expressions ). tās ir dajebkur, pat javaskriptā.

2) vienkārši uzrakstīt, lai izķeksē tikai derīgos simbolus. prototips iekš php:

<?php
$txt = "<> / ' q20 230-wdfasdf 3401-2320"; // sākotnējais strings
$arr = array('0','1','2','3','4','5','6','7','8','9'); // derīgie simboli

$labotais_txt = ""; // strings, kurā liksim tikai burtus

// apstaigāt visu stringu
for($i = 0; $i < strlen($txt); $i++){
$current_symbol = substr($txt,$i,1); // patreizējais apskatāmais simbols

if (in_array($current_symbol, $arr)){
$labotais_txt .= $current_symbol; // ja šis ir derīgs simbols - papildināt atgriežamo stringu
}
}

// rezultāti
echo 'bija: '.$txt.'<br>';
echo 'kļuva: '.$labotais_txt.'<br>';
?>

tas stringu "<> / ' q20 230-wdfasdf 3401-2320" pārtaisa par "2023034012320". analoģiski šādu algoritmu var pārtaisīt dajebkurā programmēšanas valodā. šo ieteicams pārtaisīt par funkciju un izmantot arī citur.

#2 usver @ 2009.04.11 00:11

3. variants (hardc0re, bez masīviem):
apstaigāt stringu, nolasīt patreizējā simbola ASCII kodu.
if ( kods >= 48 && kods <= 57){
   /* šis ir derīgais simbols - pārkopēt uz atgriežamo stringu */
}

#3 usver @ 2009.04.11 00:16

4. variants:
 apstaigāt visus skaitļus no 0 .. 127

if ( skaitlis < 48 || skaitlis > 57){
  TextBox1.Text := StringReplace(TextBox1.Text , AsciiSimbolsNoSkaitlja, '', [rfReplaceAll, rfIgnoreCase]);    
}

:D izvirst var vairākos variantos

#4 BlowMagnum @ 2009.04.11 00:20

mhm, nujā, paldies.

Ja kādam ir vēl idejas, droši rakstat.