Avatar billede lademan Novice
22. januar 2003 - 21:47 Der er 42 kommentarer og
1 løsning

strstr funktion

Hvordan udvider man denne funktion til at finde et punktum, der er efterfulgt af mellemrum og nyt stort bogstav?

if (strstr($test,".")) $pos=strpos($test,".");
Avatar billede lademan Novice
22. januar 2003 - 21:49 #1
.
Avatar billede lademan Novice
22. januar 2003 - 21:54 #2
Altså noget i retning af:

if (strstr($test,"."." "."STORTBOGSTAV")) $pos=strpos($test,"."." "."STORTBOGSTAV");
Avatar billede tipsen Nybegynder
23. januar 2003 - 02:15 #3
Eller også bruger man nogle af reg.exp. funktionerne - det lyder som om opgaven nemmest løses vha. dem...
Avatar billede lilleib Nybegynder
23. januar 2003 - 10:24 #4
Enig - det er nemmere i regexp... Du kan bruge dette til at se om der er et match:

preg_match("/\. [A-Z]/",$test,$result);

$result får tildelt værdien som der findes og selve preg_match returnere true eller false alt efter om der findes et match. Fx:

$test=". G";
if (preg_match("/\. [A-Z]/",$test,$result))
{
  echo 'Der er fundet et match: "'.$result[0].'"';
} else {
  echo 'Intet match';
}
Avatar billede lademan Novice
23. januar 2003 - 10:59 #5
Jeg kan ikke rigtig overføre det på mit script:

            if (preg_match("/\. [A-Z]/",$test,$result)){
            $find = preg_match("/\. [A-Z]/",$test,$result);
            $pos=strpos($find);
            }
Avatar billede lilleib Nybegynder
23. januar 2003 - 11:11 #6
Hvad skal du med strpos? Skulle du ikke finde ud af om der var et match? Er det dette her du mener?

if ($find=preg_match("/\. [A-Z]/",$test,$result)){
$pos=strpos($find,".")
}
Avatar billede lilleib Nybegynder
23. januar 2003 - 11:12 #7
^^^^^Dette finder positionen på punktummet... Er det dette du mente?
Avatar billede lademan Novice
23. januar 2003 - 11:14 #8
Jeg skal finde positionen på det første punktum efterfuldt af mellemrum og et stort bogstav.
Avatar billede lademan Novice
23. januar 2003 - 11:15 #9
//####### Klipper et stykke tekst ud der ligger lige fra 180 til 280 tegn inde i texten   
            $test=substr($row[tekst],180,100);
           
            //####### Finder positionen for det første punktum hvis der er et
            if (strstr($test,". ")) $pos=strpos($test,". ");
            else{
           
            //####### Ellers klippe et større stykke tekst ud
            $test1=substr($row[tekst],140,300);
                   
            //####### og finder igen positionen for det første punktum
            $pos=strpos($test1,". ")-40;
            }
           
            //####### Sætter det aktuelle antal karakterer i udklippet (+1 for at få punktummet med)
            $aktuel_len=180+$pos+1;
               
            //####### Lægger teksten med de første ca 200 tegn over i en variabel
            $tekst=substr($row[tekst],0,$aktuel_len);
Avatar billede lademan Novice
23. januar 2003 - 11:15 #10
Det er ovenstående kode der skal udvides så det finder første punktum efterfuldt af mellemrum og et stort bogstav.
Avatar billede lilleib Nybegynder
23. januar 2003 - 11:16 #11
Det gør dette her for dig...

if ($find=preg_match("/\. [A-Z]/",$test,$result)){
$pos=strpos($find,".")
}
Avatar billede lademan Novice
23. januar 2003 - 11:16 #12
Det bruges til en forside, hvor der hives en appetizer ud.
Avatar billede lademan Novice
23. januar 2003 - 11:17 #13
Prøver det lige ;-)
Avatar billede lilleib Nybegynder
23. januar 2003 - 11:18 #14
Det gør dette her for dig...

if ($find=preg_match("/\. [A-Z]/",$test,$result)){
$pos=strpos($find,".")
}
Avatar billede lademan Novice
23. januar 2003 - 11:22 #15
Så bude det her jo virke:

            //####### Klipper et stykke tekst ud der ligger lige fra 180 til 280 tegn inde i texten   
            $test=substr($row[tekst],180,100);
           
            //####### Finder positionen for det første punktum hvis der er et
            if ($find=preg_match("/\. [A-Z]/",$test,$result))$pos=strpos($find,".");
            else{
           
            //####### Ellers klippe et større stykke tekst ud
            $test1=substr($row[tekst],140,300);
                   
            //####### og finder igen positionen for det første punktum
            if ($find=preg_match("/\. [A-Z]/",$test1,$result))$pos=strpos($find,".")-40;
            }
           
            //####### Sætter det aktuelle antal karakterer i udklippet (+1 for at få punktummet med)
            $aktuel_len=180+$pos+1;
               
            //####### Lægger teksten med de første ca 200 tegn over i en variabel
            $tekst=substr($row[tekst],0,$aktuel_len);


Men det gør det ikke.
Avatar billede lademan Novice
23. januar 2003 - 11:29 #16
Stwange ..
Avatar billede lademan Novice
23. januar 2003 - 11:33 #17
Så virker dit script altså ikke.
Avatar billede lilleib Nybegynder
23. januar 2003 - 11:36 #18
Ahhh, min fejl....

$test=substr($row['tekst'],180,100);
if ($find=preg_match("/\. [A-Z]/",$test,$result)) {
  $pos=(int)strpos($test,".");
} else{
  $test1=substr($row['tekst'],140,300);
  if ($find=preg_match("/\. [A-Z]/",$test1,$result)) {
    $pos=(int)strpos($test1,".")-40;
  }
}
$aktuel_len=180+$pos+1;
$tekst=substr($row['tekst'],0,$aktuel_len);
Avatar billede lademan Novice
23. januar 2003 - 11:44 #19
Prøv at sætte variablen til:

$row[tekst] = "Dansk Brætsejler Organisation ønsker at forny deres ansigt udadtil, hvorfor de indbyder alle kreative sjæle til at komme med et forslag til et nyt logo, som skal benyttes på deres website www.dbo.dk samt i forbindelse med ca. alt tryk på alt officielt papir."

Den er altså heller ikke god nok ...  :-)
Avatar billede lademan Novice
23. januar 2003 - 11:45 #20
Den skal jo ikke stoppe ved ca. med ved papir, idet der kommer et stort bogstav bagefter :)
Avatar billede lademan Novice
23. januar 2003 - 11:46 #21
med = men
Avatar billede lademan Novice
23. januar 2003 - 11:48 #22
Så den virker faktisk heller ikke ;)
Avatar billede lademan Novice
23. januar 2003 - 11:58 #23
tsk tsk, det er sgu svært at få øje på, hvor den er gal
Avatar billede lilleib Nybegynder
23. januar 2003 - 12:02 #24
Ahhh, nu er jeg med... Here goes:

$row['tekst'] = 'Dansk Brætsejler Organisation ønsker at forny deres ansigt udadtil, hvorfor de indbyder alle kreative sjæle til at komme med et forslag til et nyt logo, som skal benyttes på deres website <a href="http://www.dbo.dk" target="_blank">www.dbo.dk</a> samt i forbindelse med ca. alt tryk på alt officielt papir. Mere tekst her...';
$test=substr($row['tekst'],180,100);
if ($find=preg_match("/\.\ [A-Z]./",$test,$result)) {
  $pos=(int)strpos($test,$result[0]);
} else{
  $test1=substr($row['tekst'],140,300);
  if ($find=preg_match("/\.\ [A-Z]./",$test1,$result)) {
    $pos=(int)strpos($test1,$result[0])-40;
  }
}
$aktuel_len=180+$pos+1;
$tekst=substr($row['tekst'],0,$aktuel_len);
Avatar billede lademan Novice
23. januar 2003 - 12:09 #25
Får du det til at virke?
Jeg gør ikke... tsk tsk - problemet som der ikke var en løsning på :-)
Avatar billede lilleib Nybegynder
23. januar 2003 - 12:16 #26
Hvis jeg kører overstående kommer $tekst til at inholde:
string(306) "Dansk Brætsejler Organisation ønsker at forny deres ansigt udadtil, hvorfor de indbyder alle kreative sjæle til at komme med et forslag til et nyt logo, som skal benyttes på deres website www.dbo.dk samt i forbindelse med ca. alt tryk på alt officielt papir."
Avatar billede lademan Novice
23. januar 2003 - 12:16 #27
Prøv det efter, det virker ikke :-(
Avatar billede lademan Novice
23. januar 2003 - 12:17 #28
Ja sgu!!
Avatar billede lilleib Nybegynder
23. januar 2003 - 12:19 #29
> Ja sgu!!

.. som i det virker?
Avatar billede lademan Novice
23. januar 2003 - 12:25 #30
Nu er min server lige nede, men det ser ud til det virker ;)
Tester lige når den hopper på snarrest.
Avatar billede lilleib Nybegynder
23. januar 2003 - 12:33 #31
Coolburger - held og lykke med det...
Avatar billede lademan Novice
23. januar 2003 - 12:35 #32
Dit virker perfekt, men det virker ikke når jeg sætter ind i resten af mit script. Jeg må snart lære det.
Avatar billede lademan Novice
23. januar 2003 - 12:47 #33
Thanx :)
Avatar billede lademan Novice
23. januar 2003 - 13:40 #34
Får du også problemer når du kører scriptet i en while løkke?

<?php
$result = mysql_query("SELECT * FROM data_univers ORDER BY dato DESC LIMIT 0,4");
$number = mysql_num_rows($result);
if ($number > 0) {
    while($row = mysql_fetch_array($result)) {
        $test=substr($row['indhold'],180,100);
        if ($find=preg_match("/\.\ [A-Z]./",$test,$resultat)) {
          $pos=(int)strpos($test,$resultat[0]);
        } else{
          $test1=substr($row['indhold'],140,300);
          if ($find=preg_match("/\.\ [A-Z]./",$test1,$resultat)) {
            $pos=(int)strpos($test1,$resultat[0])-40;
          }
        }
        $aktuel_len=180+$pos+1;
        $indhold=substr($row['indhold'],0,$aktuel_len);
        $indhold=eregi_replace("<br>", " ", $indhold);

        print "<p>$indhold</p>
        <p><a href=\"univers/?uni=$row[univers]&id=$row[id]\">Læs mere...</a></p>
        <p>&nbsp;</p>";
        }
    }
?>
Avatar billede lademan Novice
23. januar 2003 - 13:41 #35
Jeg lan simpelthen ikke få det til at funke i løkken??!
Udenfor løkken virker det fint. Kan ikke se hvad der skulle give problemer?
Avatar billede lilleib Nybegynder
23. januar 2003 - 13:57 #36
Nu kan jeg ikke lave while løkken da jeg ikke har dine data men nedenstående virker med disse data:

$row['indhold'] = 'Dansk Brætsejler Organisation ønsker at forny deres ansigt udadtil, hvorfor de indbyder alle kreative sjæle til at komme med et forslag til et nyt logo, som skal benyttes på deres website <a href="http://www.dbo.dk" target="_blank">www.dbo.dk</a> samt i forbindelse med ca. alt tryk på alt officielt papir. Mere tekst her...';
$row['id']=138;
$row['univers']='ipsum_lorem';



Prøv dette i din while løkke...

<?php
$test=substr($row['indhold'],180,100);
if ($find=preg_match("/\.\ [A-Z]./",$test,$resultat)) {
  $pos=(int)strpos($test,$resultat[0]);
} else{
  $test1=substr($row['indhold'],140,300);
  if ($find=preg_match("/\.\ [A-Z]./",$test1,$resultat)) {
    $pos=(int)strpos($test1,$resultat[0])-40;
  }
}
$aktuel_len=180+$pos+1;
$indhold=substr($row['indhold'],0,$aktuel_len);
$indhold=eregi_replace("<br>", " ", $indhold);

print "<p>$indhold</p>
        <p><a href=\"univers/?uni=$row[univers]&id=$row[id]\">Læs mere...</a></p>
        <p>&nbsp;</p>";

?>
Avatar billede lademan Novice
23. januar 2003 - 14:31 #37
Prøv så med denne:

$row['indhold'] = 'Underskuddet på budgettet for den amerikanske stat er på vej mod 300 milliarder dollar, hvilket svarer til 2,1 billioner danske kroner eller knap 100 storebæltsbroer. <br>I onsdags sagde præsident George Bush? budgetdirektør Mitchell Daniels i følge Berlingske Tidende';
Avatar billede lademan Novice
23. januar 2003 - 14:32 #38
Så er den gal.
Avatar billede lilleib Nybegynder
23. januar 2003 - 14:46 #39
Det er fordi der kommer et <br> efter punktummet.... Du skal bruge dette regexp istedet: "/\.\ [A-Z\n\<]./"
Hvor laver du det ikke bare om til et punktum og et mellemrum??
Avatar billede lademan Novice
24. januar 2003 - 12:19 #40
Fordi så tages der ikke højde for: eks. fx. ca. og andre forkortelser ;-)
Avatar billede lilleib Nybegynder
24. januar 2003 - 12:31 #41
Den reagere kun på punktum efterfulgt af store bogstaver, linieskift, eller "<"...
Avatar billede lademan Novice
24. januar 2003 - 12:34 #42
Skal jeg droppe det så?
Avatar billede lademan Novice
24. januar 2003 - 12:36 #43
og nøjes med punktum efterfulgt af mellemrum?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester