[php] afkorten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • cverkooyen
  • Registratie: Juli 2002
  • Nu online
He, ik ben bezig een functie te schrijven om na de 2e punt iets af te korten alleen kom ik er nog niet helemaal uit hoe ik kan afkorten tot de tweede punt, het tellen van de punten is wel gelukt:


if (substr_count($bericht, ".") >= "2")
{
// iets dat het afkort }
return $bericht;
}
else
{
return $bericht;
}

Kan iemand me verder helpen?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:16
Taal, titel, info...

Kortom: vul je topic eens aan mbhv de Quickstart

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:26

Creepy

Tactical Espionage Splatterer

Wat had je zelf al bedacht?

Hoe klinkt:
1 - Zoeken waar de tweede punt staat
2 - Alles vanaf de het begin tot de tweede punt copieren.
??

Overigens ga je er vanuit dat er nu minumaal 3 punten voorkomen in je string.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Ten eerste: read the quickstart!
Ten tweede: je if klopt niet -> nu kort je alleen af als er meer dan 2 punten in je string zitten. En volgens mij wil je afkorten na de tweede punt.
edit:
OK, daar was ik te snel: zie ook rookie

Ten derde: dit lijkt erg op een scriptrequest. Maar dat kan ook te maken hebben met het feit dat je openingspost niet correct is. Nogmaals: kijk naar de quickstart en post ff wat meer info...

[ Voor 16% gewijzigd door OZ-Gump op 19-03-2003 09:33 ]

My personal website


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Creepy schreef op 19 March 2003 @ 09:30:
Overigens ga je er vanuit dat er nu minumaal 3 punten voorkomen in je string.
if (substr_count($bericht, ".") >= "2")

>= is Groter dan óf gelijk aan, dus minimaal 2 ;)

Acties:
  • 0 Henk 'm!

Verwijderd

in VB heb je de code

Visual Basic:
1
2
3
4
5
6
7
8
'Zoekt de plaats van de eerste punt op
place = InStr(0, $Bericht, ".", vbTextCompare)+1

'Zoekt de plaats van de tweede punt op
place = InStr(place, $Bericht, ".", vbTextCompare)-1

'Knipt het bericht af
Bericht = Left(Bericht, place)


Ik weet niet of je hier iets aan hebt, maar misschien krijg je nu een idee van waar je naar kunt zoeken.

[ Voor 23% gewijzigd door Verwijderd op 19-03-2003 09:35 ]


Acties:
  • 0 Henk 'm!

  • cverkooyen
  • Registratie: Juli 2002
  • Nu online
Sorry voor het verkeerde begin :> Bedankt dat iedereen zo snel reageerd! _/-\o_

Ik gebruik dus de taal PHP en dit is niet echt een script request maar een help request omdat ik erniet uitkom.

Ik probeer dus te maken dat als ik een zin heb:

Jan gaat fietsen. HIj moet naar de bakker. De Bakker woont 30 straten verderop.

dat je alleen ziet staan:

Jan gaat fietsen. HIj moet naar de bakker.

IK hoop dat het nu een beetje duidelijk is. Ik dacht substr_count de beste functie is om de punten te tellen in de regel alleen nu dat hij het afkort op na de 2e wil niet echt lukken

[ Voor 5% gewijzigd door cverkooyen op 19-03-2003 09:37 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:26

Creepy

Tactical Espionage Splatterer

TheRookie schreef op 19 March 2003 @ 09:32:
[...]

if (substr_count($bericht, ".") >= "2")

>= is Groter dan óf gelijk aan, dus minimaal 2 ;)
Coffee gooooood, need more coffee! ;)
Pff.. al die kleine tekens, wat lees je daar snel overheen ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • sjoerdb2
  • Registratie: Juli 2001
  • Laatst online: 09-05 09:52
niet de meest nette manier...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
if (substr_count($bericht, ".") >= "2") 
{ 
$afkorting = explode(".",$bericht);
$bericht = $afkorting[0].".".$afkorting[1];
// iets dat het afkort 
}
return $bericht; 
}
else 
{
return $bericht;
}

[ Voor 24% gewijzigd door sjoerdb2 op 19-03-2003 09:54 ]


Acties:
  • 0 Henk 'm!

  • cverkooyen
  • Registratie: Juli 2002
  • Nu online
Bedankt hij doet het! Maar hoe zou hij dan netter kunnen?

Acties:
  • 0 Henk 'm!

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
sjoerdb schreef op 19 March 2003 @ 09:51:
niet de meest nette manier...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
if (substr_count($bericht, ".") >= "2") 
{ 
$afkorting = explode(".",$bericht);
$bericht = $afkorting[0].".".$afkorting[1];
// iets dat het afkort 
}
return $bericht; 
}
else 
{
return $bericht;
}
lijkt me wel een prima oplossing voor hetgeen de topicstarter wil toch?

niet meest nette omdat je niet vraagt om iets dat het bericht in stukken hakt tussen de punten.. maar eigenlijk in 2 delen.. gedeelte tot de 2e punt en de rest..

maar dit werkt prima op zich lijkt me :)

Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

moet je er niet een functie van maken als je return gebruikt?

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
OK hier een ongeteste oplossing die wat dynamischer is.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$string = 'Jan gaat fietsen. HIj moet naar de bakker. De Bakker woont 30 straten verderop.';
$n = 2;
$delimiter = '.';
$i = 0;
$pos = false;
$offset = 0;
while ($pos=strpos($string,$delimiter,$offset) && $pos !== false && $i <$n) {
   ++$i;
   $offset = $pos;
}
if ($pos === false) {
   return $string;
} else {
   return substr($string,0,$offset);
}

[ Voor 7% gewijzigd door stekkel op 19-03-2003 20:11 ]


Acties:
  • 0 Henk 'm!

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 16-08 06:44

CyberSnooP

^^^^ schrijft --->

Mijn variant dan maar:
PHP:
1
2
3
4
5
6
7
function shorten($message) {
    $last = 0; $i = 0;
    while (($last = strpos($message, '.', $last + 1)) !== false && ++$i < 2) {}
    return ($last === false ? $message : substr($message, 0, $last));
}

print shorten('Jan. Piet en Klaas. Woei!');


Hij lijkt verdacht veel op die van stekel!.. maar ik was weer vergeten de draad te verversen voor te posten.. :S

[ Voor 24% gewijzigd door CyberSnooP op 19-03-2003 20:35 ]

|_____vakje______|


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
CyberSnooP schreef op 19 March 2003 @ 20:33:
Mijn variant dan maar:
PHP:
1
2
3
4
5
6
7
function shorten($message) {
    $last = 0; $i = 0;
    while (($last = strpos($message, '.', $last + 1)) !== false && ++$i < 2) {}
    return ($last === false ? $message : substr($message, 0, $last));
}

print shorten('Jan. Piet en Klaas. Woei!');


Hij lijkt verdacht veel op die van stekel!.. maar ik was weer vergeten de draad te verversen voor te posten.. :S
Hehe :) een beetje shufflen van code en we hebben de optimale oplossing. Jouw functie bevat een syntax die ik mooier vind. Stop er die $delimiter en $n in en we zijn klaar.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
Omdat het altijd beter kan, ook mijn suggestie:
PHP:
1
2
3
function shorten($message) { 
  return implode('.', array_slice(explode('.', trim($invoer, '.')), 0, 2)).'.';
}

Het gedoe met trim en de toegevoegde punt op het eind is nodig om vervelende randgevallen zoals "Tekst." correct te verwerken.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Soultaker schreef op 19 maart 2003 @ 23:12:
Omdat het altijd beter kan, ook mijn suggestie:
PHP:
1
2
3
function shorten($message) { 
  return implode('.', array_slice(explode('.', trim($invoer, '.')), 0, 2)).'.';
}

Het gedoe met trim en de toegevoegde punt op het eind is nodig om vervelende randgevallen zoals "Tekst." correct te verwerken.
Is alleen beter bij korte $invoer argumenten.
Bij grote lappen tekst is het bijzonder inefficient.

M.a.w. het hangt van de toepassing af.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:47
stekkel schreef op 20 March 2003 @ 01:21:
Is alleen beter bij korte $invoer argumenten.
Bij grote lappen tekst is het bijzonder inefficient.

M.a.w. het hangt van de toepassing af.
Nou ja, die eerste twee regels zijn vrij kort. Door aan je explode een length-parameter (3 in dit geval) mee te geven, kan voorkomen worden dat onnodig veel gesplitst wordt.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Soultaker schreef op 20 March 2003 @ 01:26:
[...]


Nou ja, die eerste twee regels zijn vrij kort. Door aan je explode een length-parameter (3 in dit geval) mee te geven, kan voorkomen worden dat onnodig veel gesplitst wordt.
Hee dat is handig die length parameter. Schaam me diep dat ik daar niet aan gedacht heb 8)7.
Ik neem mijn woorden terug. :P

Acties:
  • 0 Henk 'm!

  • cverkooyen
  • Registratie: Juli 2002
  • Nu online
Soultaker schreef op 19 March 2003 @ 23:12:
Omdat het altijd beter kan, ook mijn suggestie:
PHP:
1
2
3
function shorten($message) { 
  return implode('.', array_slice(explode('.', trim($invoer, '.')), 0, 2)).'.';
}

Het gedoe met trim en de toegevoegde punt op het eind is nodig om vervelende randgevallen zoals "Tekst." correct te verwerken.
Thnx hij doet het, alleen nu is er nog een nadeel van dit alles. Stel in mijn tekst staat:

Mevr. J.P.M Schreven oid dan kort hij het ook af, hier is zeker niets tegen te doen?

Acties:
  • 0 Henk 'm!

Verwijderd

nee, een punt is een punt, dus als je na de tweede punt afkort, dan doet ie dat ook, of het nou een afkorting is of niet, daar heeft php niet zoveel verstand van ;)
je kunt wel (maar dat is een hoop gedoe) een ubb tag maken voor een punt, bijvoorbeeld [punt], deze laat je dan replacen met de ascii code voor de punt (dus iets van "&punt;" ). Ik zou het alleen niet aanraden, omdat het niet gebruiksvriendelijk is...

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Misschien is splitten op 'punt-spatie' een optie, omdat in zinnen er altijd een spatie achter de punt hoort en in afkortingen niet
Pagina: 1