Newsgroup: it.comp.lang.perl
Titolo: Dubbi su selezione stringa

Ciao sono niubbo di Perl e mi sto incagliando su un problema forse
stupido.
Ho un file di testo con vari righi. Devo selezionare da ogni rigo un
numero che può avere una lunghezza varia...
Es(Il numero 2117106 che inizia sempre al carattere 53 ma che puo
essere di 6,7 8 cifre):
 PAp00000001	16	ENSP00000352696	16	100	464	479	0	2	-1	2117106	52117191
ENST00000359671	ENSG00000115414
ho provato con la funzione subtring
$peptideinizio = substr($posizionepeptide,53,\b)
dove $posizionepeptide è la mia stringa Es.
Speravo ceh substr capisse che deve leggere da 53 al tab ma non lo fa
Qualcuno ha qualche suggerimento?
Grazie
Guido



Perche' non provi con qualcosa tipo
m/^.{52}(\d+)/;$peptideinizio = $1

 Guido
Credo che tu abbia confuso la funzione index() con la funzione substr()
che comunque ti darebbe solo l' offset nello scalare del 53 da cui parte
cio' che ti interessa, ma fino a dove? fino al prossimo space o tab?
Credo che la soluzione con Regex suggerita da antani sia da preferire.
Anche una soluzione con split() che comunque e' da considerarsi una
soluzione in tecnologia regex() e' considerabile se sai con certezza
la posizione del field che ti interessa e piuttosto non sei sicuro che
il 53 non appaia anche in altre posizioni precedenti nel pattern
(cioe' se sai che la tua base dati e' strutturata in record ben
formalizzati)
es:
$miinteressaildodicesimocampo = split(/\s+/, $_)[11];
Ciao
Roberto.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Roberto.
uffa...
$miinteressaildodicesimocampo = (split(/\s+/, $_))[11];



Grazie a tutti il problema è aggravato dal fatto che non sempre quello
che mi interessa è in posizione 53.
Ho risolto ameno credo con una soluzione sporchissima che attacco non
si sa mai a qualcuno potesse servire:
in pratica:
- apro il file e lo leggo stringa per stringa
-con Index mi pongo in una posizione che non cambia mai ed inizio a
contare
- con substr estraggo quello che mi serve e ci faccio poi altre cose
open File, "<","File.txt";
while ($posizionepeptide = <File> )
{
 #la fine della posizione cromosomica iniziale
 $peptideiniziofine= index($posizionepeptide,"\t",12);
 #la lunghezza della posizione cromosomica iniziale
 $lunghezza = $peptideiniziofine -11 ;
 #l'inizio della posizione cromosomica finale
 $peptidefineinizio = 11+$lunghezza+1;
 #la fine della posizione cromosomica finale
 $peptidefinefine = index( $posizionepeptide,"\t",$peptidefineinizio);
 #lunghezza posizione cromosomica finale
 $lunghezza2 =  $peptidefinefine- $peptidefineinizio +1;
 #posizione cromosomica finale ed iniziale di ogni peptide
 $peptideinizio = substr($posizionepeptide,12,$lunghezza);
 $peptidefine = substr($posizionepeptide,$peptidefineinizio,
$lunghezza2);
 $ENSTpeptide = substr($posizionepeptide, -32,15);
 chop $peptideinizio;
 chop $peptidefine;
 print $posizionepeptide;
 print "\n";
 print "Il transcritto che matcha il peptide è:\n";
 print $ENSTpeptide;
 print "\n";
 print $peptideinizio;
 print "\n";
 print $peptidefine;
 print "\n";

 si sa mai a qualcuno potesse servire:
Scusa ma non ho capito cosa vuoi fare...se vuoi prendere il gruppo di cifre
che precede il tab, puoi fare qulcosa del tipo
m/(d+)\t/; $stringa = $1
ma non sono sicuro che sia quello che ti serve.