22. juni 2008 - 11:49
Der er
18 kommentarer og 1 løsning
Parsing af text.
Jeg står og skal bruge et script som kan parse noget text. Teksten kommer noget lignende. Spg: Svar Spg: Spg: Svar Spg: Svar Skal have fjernet alle tomme linjer og Spg: hvor der ikke er noget svar under. Der er aldig ":" i slutningen af et svar. Nogen RegEx eksperter som har mulighed for at hjælpe. Er desværre helt tabt her.
Annonceindlæg fra GlobalConnect
Kan du ikke bare replace dobbeltlinjeskift (\n\n) og "Spg:\n" med et enkelt?
Replace dobbellinjeskift løser selvfølgelig det ene problem. Men Spg: er ikke fast. Kan være Kan jeg: Ja Kunne jeg: Næ Og ville gerne have det parset så jeg fx kan formatere og skrive <h1>Spg<h1><p>Svar</p> Eller indsætte i database eller hvad der nu engang bliver optimalt. Kunne selvfølgelig have været mere grundig i min forklaring når jeg kigger nu.
Men er der ikke tekst efter Spg: og Svar ? Eller er det kun som du har der ? For ville det så ikke være som W13 skriver. Først slette alle tomme linjer. Så kan du efterfølgende lave en replace på Spg: med: <h1>Spg:</h1> og bagefter replace Svar med <p>Svar</p>
Så det eneste man kan gå ud fra er at der er et ":" efter et spørgsmål og en ny linje efter et svar?
Ja. Det er nogenlunde det.
Kunne du ikke prøve at fylde lidt mere data på din tekst ? Det må vel være noget i stil med: Spg: Hvad hedder kongen af eksperten.dk ? Svar Han hedder ikke noget, men prøv med Dronning Gurli. Eller er det kun Spg: og Svar der står ?
Tror jeg er træt. Kan godt selv se jeg ikke er tydelig. Der står slet ikke spg eller svar... Der står noget tekst. Er der ":" efter er det et spørgsmål er der ikke et ":" efter er det er svar. Det er altid en linie tekst.
Test denne kode: <?php $text = 'DIN TEKST'; $parts = explode("\r\n",$text); for($i = 0; $i < count($parts); $i++){ if(!empty($parts[$i])){ if(preg_match('/^(.*?:)$/', $parts[$i])){ echo '<h1>' . $parts[$i] . '</h1>'; }else{ echo '<p>' . $parts[$i] . '</p>'; } } } ?>
Det fungerer super. Med undtagelse af at den ikke fjerner spgs uden svar. Det er ikke essentielt. Men kunne være fantastisk.
22. juni 2008 - 13:54
#10
Skal den fjerne spørgsmål uden svar også ?
22. juni 2008 - 13:54
#11
Ahh, det står der jo netop også i starten! :o)
22. juni 2008 - 13:56
#12
Når jeg ikke formulerer mig ordentligt kan jeg jo heller ikke forvente folk læser grundigt :)
22. juni 2008 - 14:02
#13
Hvor kommer disse data fra ?
22. juni 2008 - 14:12
#14
Det er en helvedes masse data, som skal copy/pastes ind i en database, og som ikke er særlig velformateret. Man kan selv sidde og slette de ting som mangler, men det her kan spare en masse tid. Det ville faktisk være optimalt med en selvstændig funktion til at slette linjer som slutter på ":" og som enten har \n eller en anden linje med ":" tilsidst efter sig. Så kan jeg blot slette overskydende tekst ved indsætning og bruge den fremragende funktion du har lavet til at formatere ved udtræk.
22. juni 2008 - 14:13
#15
*slette de ting som er overskydende. Det andet giver jo ikke mening.
22. juni 2008 - 14:56
#16
Det var jo egentlig super simpelt med din funktion. $text = $_POST["text"]; $parts = explode("\r\n",$text); for($i = 0; $i < count($parts); $i++){ if(!empty($parts[$i])){ if(preg_match('/^(.*?:)$/', $parts[$i])){ if(!preg_match('/^(.*?:)$/', $parts[$i+1])){ echo '<h1>' . $parts[$i] . '</h1>'; } }else{ echo '<p>' . $parts[$i] . '</p>'; } } } Med mindre det kan gørew nemmere så smid et svar så får du point. Det var fatastisk :)
22. juni 2008 - 15:00
#17
Og så lige en sidste if på så den ikke går ud af arrayet med $i+1 $text = $_POST["text"]; $parts = explode("\r\n",$text); for($i = 0; $i < count($parts); $i++){ if(!empty($parts[$i])){ if(preg_match('/^(.*?:)$/', $parts[$i])){ if(count($parts)>($i+1)){ if(!preg_match('/^(.*?:)$/', $parts[$i+1])){ echo '<h1>' . $parts[$i] . '</h1>'; } } }else{ echo '<p>' . $parts[$i] . '</p>'; } } }
22. juni 2008 - 17:12
#18
Du får et svar!
22. juni 2008 - 21:07
#19
Takker for point.
Vi tilbyder markedets bedste kurser inden for webudvikling