Autor | Zpráva | ||
---|---|---|---|
NefungujeMiTo Profil * |
#1 · Zasláno: 6. 2. 2014, 19:42:06
Zdravím, v php potřebuji regulární výraz, předem upozornuji, regulární výraz, nikoliv explode apod.
Jedná se o regulární výraz, který dosadím do preg_match v PHP. Mám řetězec : "řetězec,float,float,float,(tohle chci),řetězec". Čili pregmatch vytáhne to, co je mezi řetězci v takovémto tvaru. |
||
Markit Profil * |
#2 · Zasláno: 6. 2. 2014, 19:53:38
<?php
$Data = "řetězec,float,float,float,TOHLE 1 2 3,řetězec"; preg_match("/řetězec,float,float,float,(.+?),řetězec/", $Data, $Match); print_R($Match); |
||
NefungujeMiTo Profil * |
#3 · Zasláno: 6. 2. 2014, 19:56:01
Tím řetězcem může být třeba "sdfs,1.5,2.3,4.8,(tohle chci),jsdfh"
To "řetězec" a "float" byl náznak datového typu. |
||
Markit Profil * |
#4 · Zasláno: 6. 2. 2014, 19:59:50
Dúfal som, že sa s tým trošku pohráš.
Preg by mal vyzerať takto: /(\S+),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(.+?),(\S+)/ |
||
NefungujeMiTo Profil * |
#5 · Zasláno: 6. 2. 2014, 20:04:13 · Upravil/a: NefungujeMiTo
Díky za snahu, bohužel to nefunguje, nevím na čí straně je chyba.
$str = "retezec,retezec,dalsi,10.5,retezec,retezec,retezec,dalsi,11.5,retezec,"; preg_match_all("/(\S+),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(.+?),(\S+)/", $str, $out); var_dump($out); Ok, moje chyba, je tam decimal, bohužel když dumpnu pole, tak je tam rozcuckovanej celej ten string, já potřebuji pouze ten float Nyní to mám takto, <?php $str = "retezec,5,5,5,10.5,retezec"; preg_match_all("/(\S+),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(.*),(\S+)/", $str, $out); var_dump($out); ?> Funguje to, ale do toho pole potřebuji uložit pouze ten jeden float, nikoliv vše, při dumpu to vypíše každou část stringu. |
||
Joker Profil |
#6 · Zasláno: 6. 2. 2014, 21:30:12
NefungujeMiTo:
Nebylo by jednodušší toto? explode(",", $string)[4] |
||
Tori Profil |
NefungujeMiTo:
Kterou z těch čtyř pětek chcete? |
||
NefungujeMiTo Profil * |
#8 · Zasláno: 6. 2. 2014, 21:35:24
Potřebuji tu pětku před koncem, podle reguláru, jde o to, že mám textový soubor, kde mám v tomhle stylu asi 100 řádků a z každého tohoto řádku potřebuji dostat jeden údaj a to ten, který následuje po 3 floatech a za ním je řetězec.
Z téhle stránky mám feed toho textového souboru : http://finance.yahoo.com/q/hp?s=DMND&a=06&b=21&c=2013&d=01&e=6&f=2014&g=d. Je tam několik set řádků, dole je download tabulky, která je v txt. Hodnota každé bunky je v textovém souboru oddělena čárkou, asi takhle : text,text,text,text A já potřebuji z každého řádku vybrat 5 hodnotu, tedy Close price v tabulce. Děkuji všem za ochotu a vytrvání. |
||
Tori Profil |
NefungujeMiTo:
„Funguje to, ale do toho pole potřebuji uložit pouze ten jeden float, nikoliv vše“ A v čem je problém? $str = "retezec,5,5,5,10.5,retezec"; preg_match_all("/(\S+),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(.*),(\S+)/", $str, $out); $cislo = $out[5][0]; // opraveno, byly prohozené indexy. var_dump($cislo); |
||
NefungujeMiTo Profil * |
Váš kod mi vyhodil null a problém je v tom, že to nemohu takhle ukládat, bude tam 100 řádků a z každé jedna hodnota.
Moderátor jenikkozak: Prosím, nezakládej nám tu duplicitní vlákna.
|
||
abc Profil |
$d = str_getcsv(file_get_contents("table.csv"), ","); //var_dump($d); for ($i = 11; $i < count($d); $i += 6) {//prvni je v 11, dalsi potom v +6 echo $d[$i] . "<br>"; } |
||
Kubo2 Profil |
#12 · Zasláno: 6. 2. 2014, 22:56:59
NefungujeMiTo:
Čo takto fgetcsv ? (Teoreticky) funkčný kód:
<?php $fp = fopen("filename", 'r'); $floates = []; if($fp) { while(!feof($fp)) { $row = fgetcsv($fp); if(!is_null($row[0])) { $floates[] = (float)$row[4]; } } fclose($fp); } |
||
midlan Profil |
#13 · Zasláno: 7. 2. 2014, 10:20:16
U částí které nechceš v
$out použij uzávorkování bez zpětné reference.
(vytvoří ref)(taky vytvoří) (?:nevytvoří ref)(vytvoří) |
||
Tori Profil |
Opravená verze, jestli teda chcete použít jen reguláry:
$file = file_get_contents('table.csv'); preg_match_all("/^([\d-]+)(?:,[\d.]+){3},([\d.]+),/m", $file, $out, PREG_PATTERN_ORDER); var_dump($out[2]); |
||
Časová prodleva: 10 let
|
0