webForumDet fria alternativet

läsa in text, redigera och spara

PHP

9 svar · 644 visningar · startad av noratx

Medlem sedan feb. 200193 inlägg
Frågan#1

Hej!

Har sökt en del på forumet samt läst en del i manualen ang fopen och preg, men inte riktigt förstått hur man gör.

Hoppas att någon kanske kan hjälpa mig lite.

Vad jag vill uppnå är att jag ska läsa in all text mellan taggarna <PRE> och </PRE> på en sida, desan skall alla taggar (inklusive <PRE> och </PRE>, bortsett från <BR> som skall koverteras till vanliga entertryckningar, och sedan skall allt sparas i en fil som plain text.

Jag har försökt med en gammal kod jag hade, men inte fått det att fungera.
Koden jag försökt med är fäljande:

<?
$fp = fopen("url-till-sidan", r);
while (!feof($fp)){
 $content.=fgets($fp, 4096);
}

ereg("<PRE>(.*)</PRE>", $content, $resultat);

$bort_med_br = ereg_replace("(<br> )|(<br /> )", " ", $resultat[0]);
$enbart_text = strip_tags($bort_med_br);

echo $enbart_text;
?>

Jag får två fel som upprepar sig tills jag trycker på stop.

Warning: fopen("url-till-sidan", "r") - Success in /www-root/test/read.php on line 2

Warning: Supplied argument is not a valid File-Handle resource in /www-root/test/read.php on line 3

Warning: Supplied argument is not a valid File-Handle resource in /www-root/test/read.php on line 4

Hoppas någon kan hjälpa mig att rätta till/kompletera koden så den fungerar...

Medlem sedan jan. 20021 122 inlägg
#2

Om du ska skriva till "url-till-sidan", inte bara läsa, så kan du inte använda "r", då blir det "r+" istället. Se också till att placera r+ inom citattecken.

För att läsa in mellan pre-taggarna använder du

$minRegExp = "/<pre>.*<\/pre>/s";
preg_match($minRegExp, $content, $content);

Lägg märke till / i början och slutet på $minRegExp, utan dem fungerar det inte, samt s efter sista /, den gör att . även matchar radbrytningar om det finns några. Du måste också escapa / i </pre>. Du behöver inte använda paranteser runt .*, om du inte vill kunna ta fram texten utan pre-taggar med en backreference senare.

För att bli av med br-taggar använder man

$content = preg_replace("/<br\\s?\/?>/", "\r\n", $content);

\\s? betyder att det kan vara ett mellanrum, och \/? att det kan vara en /, men ingen av dem behövs. Sedan istället för att ersätta med " " så ersätter jag med \r\n, vilket blir en ny rad.

/edit2:
Laddade ner ett program för att pröva, och det verkar funka.

Medlem sedan feb. 200193 inlägg
#3

Testade det och scriptet vart som såhär:

<?
$fp = fopen("http://www.svt.se/texttv/590.html", r);
while (!feof($fp)){
 $content.=fgets($fp, 4096);
}

$resultat);

$minRegExp = "/<pre>.*<FONT COLOR=\"#00007f\">/s";
preg_match($minRegExp, $content, $content);
$content = preg_replace("/<br\s?/?>/", "\r\n", $content);

echo $content;

?>

Vad jag altså vill uppnå är att plocka fram lottoraden från text-tv's sidan 590 (kika på länken sås er du vad jag menar).

Med detta nya script fick jag bara svaret "Array".
Med mitt förra script fick jag det tillslut att fungera, dock inte riktigt så som jag ville.

Den sparar med ALLA mellanslag vilket jag inte als vill att den ska göra.
Kika här så ser du vad jag menar

Hur får jag bort alla dessa mellanslag?

Medlem sedan feb. 200193 inlägg
#4

Absolut bästa vore förresten om man kunde få till det så att det enbart får vara ett mellanslag mellan varje alfanumeriskt tecken.

Sen har jag stött på ett annat problem också.
Mitt i den texten finns även text jag skulle vilja ha bort..


    Onsdags-Lotto med Joker 11 Maj       
                                         
                                         
    LOTTO 1: 1-14-15-17-26-33-35         
                                         
    Tillägg: 6-12-20-22                  
                                         
    LOTTO 2: 13-14-17-24-25-28-29        
                                         
    Tillägg: 16-23-32-35                 
                                         
  Utdelning:       Lotto 1       Lotto 2 
  7 rätt      1.000.000 kr     Ingen rad 
  6+till         38.705 kr     46.049 kr 
  6 rätt          4.671 kr      3.357 kr 
  5 rätt            116 kr        130 kr 
  4 rätt             23 kr         24 kr 
    JOKER Onsdag 11/5 : 3-3-4-4-5-2-1    
 7 rätt     Ingen rad 4 rätt    1.878 kr 
  7 rätt     Ingen rad 4 rätt   1.878 kr 
  6 rätt     Ingen rad 3 rätt     178 kr 
  5 rätt     16.906 kr 2 rätt      54 kr

Detta är vad som skrivs till txt-filen samt visas när man kör sciptet.

Jag skulle vilja ha bort allt som har med utdelning att göra, samt då som sagt alla mellanslag, så att det ser ut så här:

Onsdags-Lotto med Joker 11 Maj
LOTTO 1: 1-14-15-17-26-33-35
Tillägg: 6-12-20-22
LOTTO 2: 13-14-17-24-25-28-29
Tillägg: 16-23-32-35
JOKER Onsdag 11/5 : 3-3-4-4-5-2-1

Hoppas någon kan hjälpa mig.

Medlem sedan feb. 200193 inlägg
#5

Ingen som kan/har lust å hjälpa? =/

Medlem sedan feb. 200193 inlägg
#6

Gör ett sista försök och hoppas att någon vill hjälpa mig.. sen får jag väl ge upp... :(

Medlem sedan aug. 20002 975 inlägg
#7

Testa något i stil med

$minRegExp = "/^.*?(<FONT COLOR=\"#00007f\">.*?)$/im";
preg_match_all($minRegExp, $content, $match);

unset($match[1][count($match[1])-1]);
echo "<pre>".implode("\n", $match[1])."</pre>";
Medlem sedan feb. 200193 inlägg
#8

Matte: Tack.. det där fungerade jätte bra.. en sista lilla fråga bara som jag inte lyckats lösa själv.. finns det något sätt att få bort alla mellanslag som finns med? Det är ett antal mellanslag som kommer med där.
Antingen att man tar bort alla mellanslag utom ett mellan varje ord, eller att man tar bort samtliga mellanslag helt ock hållet.

alla taggar som kommer med löste jag själv med strip_tags.. finns det kanske något lika simpelt sätt att plocka bort mellanslagen? =)

Medlem sedan aug. 20002 975 inlägg
#9

För att ersätta flera mellanslag i rad med endast ett borde det funka med

$text = preg_replace("/[ ]+/", " ", $text);
Medlem sedan feb. 200193 inlägg
#10

tack.. =)

278 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
135 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)