hawklv Posted January 7, 2014 Report Share Posted January 7, 2014 Sveiki.Vēršos pie jums ar jautājumu vai source koda lūgumu. Jo nu ir sanācis tā ka man irpavisam maz laika un izdomāt ko tādu paša spēkiem prasīs pārāk daudz laika un pieņemu ka man ir pārāk mazzināšanu šajā valodā.Pamatā vēlos no teksta gabala jeb vienas rakstzīmju kopas $teksts="rakstzimju kopa te...."; iegūt informāciju pa daļām..Piemēram: $string = " Apraksts Jauki puisi Vardi Andris Petertis Viktors Janis Dzimsanas dati 1984.gada 2.feb 1992.gada 15jun. 1989.gada 25.feb 1999.gada 1.aug. "; izmantojot atslēgvārdus rezultāts būtu šāds $vardi = "Andris Peteris Viktors Janis"; $dz_dat = "1984.gada 2.feb 1992.gada 15jun. 1989.gada 25.feb 1999.gada 1.aug."; $apraksts = "Jauki puisi" Pamatā doma ir tāda ka ir piemēram 3 atslēgvārdi - "Apraksts ", "Dzimšanas dati" , "Vardi" un tie tiek meklēti rakstzīmju virknē.Kad vārds tiek atrasts, no tās vietas kur tas atrodas, tiek iegūtā informācija līdz nākamajam atslēgvārdam vai ari ja visi ir izmantoti līdz teksta beigām. Viss itkā būtu samērā vienkārši bet problēma ir tāda ka teksts ko vēlos analizēt ne vienmēr būs vienāds..Tas var būt jaukts..bez nākamās rindiņas, mainīts izkārtojums untt..Līdzīgi kā attēlā.. (3 dažādos variantos) no sākuma ienāca prātā doma ka varētu noteikt katra atslēgvārda pozīciju.. ar strpos(virkne,'atslegvards')tad rēķināt starpību un beigas iegūt nepieciešamo informāciju ar - substr(virkne, $pozicija, -starpiba);Bet tas viss radīja pamatīgu mudžekli un pie jauktas secības ieguva nepareizu informāciju..Pieļauju ka kāds no jums jau iepriekš ir strādājis ar ko tādu un varētu izpalīdzētideālākais variants būtu tad ja kāds iedotu gatavu source kodu priekš piemēra, jo man ir samērā maz laika līdz projekta nodošanai un bez šīs lietas ir vel daudz cita darāmā.-Ceru uz sapratni. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted January 7, 2014 Report Share Posted January 7, 2014 Neviens tev source nedos, bet varu pačukstēt — regulārās izteiksmes (regular expressions). Quote Link to comment Share on other sites More sharing options...
aaxc Posted January 7, 2014 Report Share Posted January 7, 2014 šeit regex noderētu vislabāk, bet še tev quick-and-dirty variants ( zinu, gan ka šas izpelnīšos daudz lamuvārdu par šo, bet ir darbadienas beigas un man slinkums ): $string = " Apraksts Jauki puisi Vardi Andris Petertis Viktors Janis Dzimsanas dati 1984.gada 2.feb 1992.gada 15jun. 1989.gada 25.feb 1999.gada 1.aug. "; $keywords = array( 'Apraksts', 'Vardi', 'Dzimsanas dati' ); $parts = explode( PHP_EOL, $string ); $result = array(); foreach( $parts as $value ) { $value = str_replace( array( "\n", "\r", "\t" ), '', $value ); if ( $value != '' ) { foreach( $keywords as $keyword ){ if ( strpos( $value, $keyword ) !== false ) { $key = $keyword; $result[$key][] = str_replace( $key, '', $value ); } } array_push( $result[$key], str_replace( $key, '', $value ) ); } } foreach( $result as $key => $value ) { $result[$key] = array_unique( array_filter( $value ) ); } print_r( $result ); Output: Array ( [Apraksts] => Array ( [0] => Jauki puisi ) [Vardi] => Array ( [0] => Andris Petertis [2] => Viktors Janis ) [Dzimsanas dati] => Array ( [2] => 1984.gada 2.feb [3] => 1992.gada 15jun. [4] => 1989.gada 25.feb [5] => 1999.gada 1.aug. ) ) 0.0004sec Quote Link to comment Share on other sites More sharing options...
Sasa Posted January 7, 2014 Report Share Posted January 7, 2014 Vari mēģināt izmantot šādas regulārās izteiksmes: Lai atrastu 'Vardi' - > /Vardi(.*?)(?=Dzimsanas dati|Apraksts|\Z)/mig Lai atrastu 'Apraksts' -> /Apraksts(.*?)(?=Dzimsanas dati|Vardi|\Z)/mig Lai atrastu 'Dzimsanas dati' -> /Dzimsanas dati(.*?)(?=Vardi|Apraksts|\Z)/mig Quote Link to comment Share on other sites More sharing options...
briedis Posted January 7, 2014 Report Share Posted January 7, 2014 $s = " Apraksts Jauki puisi Vardi Andris Petertis Viktors Janis Dzimsanas dati 1984.gada 2.feb 1992.gada 15jun. 1989.gada 25.feb 1999.gada 1.aug. "; $kw = array("Apraksts", "Vardi", "Dzimsanas dati"); $r = array(); foreach($kw as $v){ $s = str_replace($v, '|' . $v . '*', $s); } foreach(explode('|', trim(trim($s), '|')) as $v){ list($i,$j) = explode('*', trim($v)); $r[$i] = array_filter(explode("\n", trim($j))); } var_dump($r); Nezinu, priekš kam jaukts regulārās izteiksmes, ja var ar elementārām str funkcijām visu izdarīt. Ar regexp'iem tik sapīties meistarībā... Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted January 7, 2014 Report Share Posted January 7, 2014 Te jau ir pieminēti varianti, kas strādās, taču pajautāšu - kur tiek ievadīti šie dati? Vai ērtāk ( gan programmētājam, gan lietotājam ) nav izveidot 3 atsevišķus ievades laukus? Ja tas ir iespējams, protams. Quote Link to comment Share on other sites More sharing options...
hawklv Posted January 9, 2014 Author Report Share Posted January 9, 2014 Atvainojos ka neatbildēju un ceļu augšā pavecu topiku. jo tiešam biju noslogots visu šo laiku.Vēlējos pateikt Paldies visiem kuri piedāvāja Source kodu un centās izpalīdzēt! Tiešam Paldies! Izdevās projektu nodot laicīgi un viss tiešam lieti noderēja!Amm. Ievākti dati tiek caur DOM .. pēc tam kodā meklējot tiek izvilkti kā teksta formāta bloks.. iespējams to varēja nedaudz savādāk izveidot, bet mani apmierināja tas ko ieguvu līdz šim - rakstzīmju (String) faila formātā ,tāpēc vēlējos to tā ari atstāt . Quote Link to comment Share on other sites More sharing options...
Kavacky Posted January 10, 2014 Report Share Posted January 10, 2014 Atvainojos ka neatbildēju un ceļu augšā pavecu topiku. jo tiešam biju noslogots visu šo laiku. Original: Posted 2014.01.07 16:47 Reply: Posted 2014.01.09 22:44 Quote Link to comment Share on other sites More sharing options...
Sasa Posted January 10, 2014 Report Share Posted January 10, 2014 Kas kuram skaitās vecs cits jau no vienreiz atvērtas piena pakas otro reizi nedzers. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.