| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | split problem Fra : Dieter Britz | 
  Dato :  21-01-08 16:25 |  
  |   
            Hvad er der galt med
 
 @initials = split (/[A-Z][a-z]*/, $firstname);
 
 $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
 enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
 et par bestående af et stort og et lille, skal de blive sammen. Det
 dækker så tilfældet af initialerne Yu (for russisk Yuri).
 
 Jeg printer $firstname, og det er OK, fx "AB", men når jeg så printer
 @initials, kommer der ingenting ud.
 
 ?
 -- 
 Dieter Britz (britz<at>chem.au.dk)
  
            
             |   |   
            
        
 
            
         
           Thorbjørn Ravn Ander~ (21-01-2008) 
         
	
            | Kommentar Fra : Thorbjørn Ravn Ander~ | 
  Dato :  21-01-08 18:41 |  
  |   
            Dieter Britz <britz@chem.au.dk> writes:
 
 > $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
 > enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
 > et par bestående af et stort og et lille, skal de blive sammen. Det
 > dækker så tilfældet af initialerne Yu (for russisk Yuri).
 >
 > Jeg printer $firstname, og det er OK, fx "AB", men når jeg så printer
 > @initials, kommer der ingenting ud.
 
 split er beregnet til at skille felter ad ud fra nogen tegn man egentlig
 ikke er interesseret i.  Du kan sætte parantes om dit regexp og så få
 dem med ud.  "perldoc -f split" har nogen gode debugtrick til at få
 det på plads.
 
 Prøv den her i stedet:
 
 $ perl -le '$a = "<AYuB>"; print join(":", $a =~ m/[A-Z][a-z]*/g)'
 A:Yu:B
 
 -- 
   Thorbjørn Ravn Andersen
  
            
             |   |   
            
        
 
            
         
           Dieter Britz (22-01-2008) 
         
	
            | Kommentar Fra : Dieter Britz | 
  Dato :  22-01-08 09:44 |  
  |   
            Thorbjørn Ravn Andersen wrote:
 
 > Dieter Britz <britz@chem.au.dk> writes:
 > 
 >> $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
 >> enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
 >> et par bestående af et stort og et lille, skal de blive sammen. Det
 >> dækker så tilfældet af initialerne Yu (for russisk Yuri).
 >>
 >> Jeg printer $firstname, og det er OK, fx "AB", men når jeg så printer
 >> @initials, kommer der ingenting ud.
 > 
 > split er beregnet til at skille felter ad ud fra nogen tegn man egentlig
 > ikke er interesseret i.  Du kan sætte parantes om dit regexp og så få
 
 Ah, seføli! Nu forstår jeg hvad problemet er, jeg splittede en række
 ingenting ad. Jeg er helt ny til Perl, som i nok kan se. Jeg er i gang
 med at konvertere en bibliografi (ca. 1400 items) skrevet i min egen
 stil, til BibTex form, og det aktuelle problem var at lave sådan
 noget som "Blow JYu" om til "J. Yu. Blow and " osv. Nu kommer jeg
 videre.
 
 > 
 > Prøv den her i stedet:
 > 
 > $ perl -le '$a = "<AYuB>"; print join(":", $a =~ m/[A-Z][a-z]*/g)'
 > A:Yu:B
 
 Tak!
 -- 
 Dieter Britz (britz<at>chem.au.dk)
  
            
             |   |   
            
        
 
            
         
           Michael Zedeler (21-01-2008) 
         
	
            | Kommentar Fra : Michael Zedeler | 
  Dato :  21-01-08 19:47 |  
  |   
            Dieter Britz wrote:
 > Hvad er der galt med
 > 
 > @initials = split (/[A-Z][a-z]*/, $firstname);
 > 
 > $firstname er en kæde af bogstaver, og jeg vil spalte kæden op i de
 > enkelte (mest store) bogstaver; dog med den undtagelse at, hvis der er
 > et par bestående af et stort og et lille, skal de blive sammen. Det
 > dækker så tilfældet af initialerne Yu (for russisk Yuri).
 
 Prøv at kigge på output når man kører dette her:
 
 print join(':', 1, 2, 3, 10), "\n";
 print join(':', split(/_/, 'abc_defg_hiJK_L') ), "\n";
 print join(':', split(/[A-Z][a-z]*/, 'Ab_CD_efg_h') ), "\n";
 
 split gør nok ikke det du forventer - kig i manualen (man perlfunc) og 
 se om ikke der står noget i perlre (man perlre) du kan bruge i stedet.
 
 Mvh. Michael.
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |