[Perl] hoofdletters in namen

Pagina: 1
Acties:

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Topicstarter
Ik heb een klein scriptje gescrheven dat hoofdletters in name n automatisch goedzet, dus "piet-hENk g. jaNsEN" wordt "Piet-Henk G. Jansen". Dat werkt dus heel mooi. Ik heb hier al eerder een vraag over gesteld maar dit is niet dezelfde!

Dit is het script in de huidige vorm:
code:
1
2
3
4
5
6
7
8
9
10
11
sub Goodname;

print Goodname("peTeR-aNdeRS ramAKers\n");
print Goodname("piet van jansen\n");

sub Goodname {
    my ($name) = @_;   
    $name = lc($name);
    $name =~ s/(^| |-|\.)([a-z])/$1\u$2/g;
    return $name;
}

De uitvoer hiervan is:
• Peter-Anders Ramakers /goed/
• Piet Van Jansen /fout: "van" moet met een kleine letter /

Mijn vraag is dus: hoe kan ik zorgen dat woorden als van, de, der, ter, den, ten niet met een hoofdletter beginnen?
En dan heb je ook nog andere woorden, zoals d'. Wie weet er nog meer?

Kort samengevat: hoe zorg je dat die tussenwoorden in namen niet met een hoofdletter beginnen?
Welke van zulke tussenwoorden zijn er allemaal?

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


Verwijderd

workaround zou zijn splitten op spaties en dan kijken of het woord van ,de etc is en die dan lcasen

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Topicstarter
Het is allemaal zo simpel he :D

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Moet je niet "Marco de Den" heten ofzo, of een buitenlandse naam hebben.. etc etc..

Niet echt een waterdichte methode en die is er eigenlijk ook niet, vandaar dat er meestal op invoer van de gebruiker wordt vertrouwd ;)

Verwijderd

mjah het kan vast ook met een regexpje maar daar ben ik niet zo'n held in

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Topicstarter
Op woensdag 01 mei 2002 12:10 schreef Bosmonster het volgende:
Moet je niet "Marco de Den" heten ofzo, of een buitenlandse naam hebben.. etc etc..

Niet echt een waterdichte methode en die is er eigenlijk ook niet, vandaar dat er meestal op invoer van de gebruiker wordt vertrouwd ;)
Euh, zoals ik het nu even aan het doen ben, wordt " Den" niet gematchd, want hij zoekt naar " den ", dus er moeten 2 spaties omheen staan.
Je kan dus ook "van jansen" invoeren, dat dan correct wordt omgezet naar "Van Jansen", terwijl "piet van jansen" gezellig "Piet van Jansen" wordt...

Gnegne, alleen krijg ik nu een error... ff uitzoeken wat dat nou weer voor onzin is hoor.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Topicstarter
Script in huidige vorm:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub Goodname;

print Goodname("peTeR-aNdeRS ramAKers\n");
print Goodname("piet van jansen\n");
print Goodname("van jansen\n");
print Goodname("Piet de Den\n");

sub Goodname {
    my ($name) = @_;   
    $name = lc($name);
    $name =~ s/(^| |-|\.)([a-z])/$1\u$2/g;
    $name =~ s/(\s)d\'/${1}d\'/gi;
    my @specials = (" van ", " de ", " den ", " der ", " ten ", " ter ", " d'");
    foreach $cword (@specials) {
      $name =~ s/$cword/\l$cword/gi;
    }
    return $name;
}

Uitvoer:
• Peter-Anders Ramakers /goed/
• Piet van Jansen /goed/
• Van Jansen /goed/
• Piet de Den /goed/

Jaa!

Heel erg bedankt weer he!

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Ok.. nu alle buitenlandse namen nog :P Wel handig gezien dit percentage inwoners in nederland ;)

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Topicstarter
Domme ik... ben ik nog vergeten te controlleren of iets met " d'" wel goed gaat...

Goodname("gigi d'agostino") => "Gigi d'agostino"
Nee dus.
Regexp aangepast: $name =~ s/$cword(.+)/\l$cword\u$1/gi;
Goodname("gigi d'agostino") => "Gigi d'Agostino"


WHooho! Ik kan proggen!
Danku nogmaals!

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Topicstarter
Mjah... heb dus al "d'", maar noem es wat dingen dan... euh, "el" iig maar verder zou ik nix weten... ohjah, "Osama Bin Laden" of "Osama bin Laden"? Da's wel belangrijk om te weten.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea

Pagina: 1