ciao
data una stringa formata da <CentroA CommonAddress="25"/>
come posso estrarre la sottostringa 25?
diciamo che li c'è un qualsia numero che è formato da 1 oppure 2,...,5 cifre
quindi la substr forse non è utilizzabile
Grazie
ciao
data una stringa formata da <CentroA CommonAddress="25"/>
come posso estrarre la sottostringa 25?
diciamo che li c'è un qualsia numero che è formato da 1 oppure 2,...,5 cifre
quindi la substr forse non è utilizzabile
Grazie
Tramite regular expression:
Se guardi nel man Perl trovi tre file sulle RE:codice:my $str = '<CentroA CommonAddress="25"/>' $str ~= /\"([1-9]+)\"/; print $1; # la variabile $1 contiene il tuo numero, se la stringa era formattata con il numero # (e solo caratteri numerici) racchiusi tra virgolette
man perlretut # il tutorial
man perl # il reference ufficiale delle RE
man perlreref # reference veloce
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
Originariamente inviato da Mich_
Tramite regular expression:
Se guardi nel man Perl trovi tre file sulle RE:codice:my $str = '<CentroA CommonAddress="25"/>' $str ~= /\"([1-9]+)\"/; print $1; # la variabile $1 contiene il tuo numero, se la stringa era formattata con il numero # (e solo caratteri numerici) racchiusi tra virgolette
man perlretut # il tutorial
man perl # il reference ufficiale delle RE
man perlreref # reference veloce
il problema è che quella è una riga di un file XML, solo che col metodo che facevo io ossia
open ....
while($r=<DATA>) {
if (r=~ /CentroA CommonAddress/) {
if ($r=~ /CentroA CommonAddress=\"(.*?)\") {
print $1;
}
ma non lo stampava a causa dell' />
adesso provo grazie
senti una cosa
data la $stringa="000.000.000";
io vorrei che si cancellassero gli zeri significativi, ossia che rimarrebbe 0.0.0.0
questo era un esempio, voglio sempre che se ci sono degli zeri significativi essi vengano cancellati
per esempio
001.027.100.003->1.27.100.3
ho provato con:
$stringa=~s/0[0][0]\./\./;
$stringa=~s/0[0][0]\./\./;
ossia ho fatto 2 iterazioni uguali, il problema è che non so comportarmi con le prime 3 cifre
Forse vuoi che si cancellino gli zeri NON significativi ... altrimenti la domanda non ha senso.
Prova una cosa del tipo:Nota che le slash che limitano la RE in questo caso sono tre, perche` richiesto dal s.codice:$stringa="000.000.000"; $stringa =~ s/(0{1-2})([1-9]??[0-9]??[\.$]){1}?/$2/;
Nel codice postato sopra manca una slash (con il m devono esserci due / una all'inizio e una alla fine)
PS: quando posti codice, usa l'apposito bottone [ CODE ] sopra l'area del testo, altrimenti non si capisce cosa hai scritto e cosa ha tagliato il forum (e si perde anche la formattazione)
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
data una cartella in cui all'interno ci sono file xml e non, volevo aprire progressivamente i file xml per farci delle operazionicodice:$my_dir = @ARGV[0] || die "Non è stata specificata la directory\n"; @files = `ls $my_dir`; foreach $infile(@files) { $count++; if ($infile =~ /\.xml/i) { open(DATA,"<$infile") || die "Can't open $infile $!"; close DATA; } } exit(0);
cmq il problema è che mi dice "can't open xxx.xml nessun file at test.pl line 9"
Risolto, mi scordavo il my_dir
curiosità
da un file devo estrarre delle date scitte in questo modo: 17-lug-10 e riscriverle in questo modo 2010-07-17
volevo sapere se ci fosse un modo di semplificare le istreuazioni necessarie alla conversione
io ho fatto una subroutine che funziona, però volevo sapere se con una unica istruzione era possibile avere lo stesso risultato
sapendo che in linuxti da la data e ora completa, po i attraverso varie opzioni comecodice:datemi da il formato che voglio, ma questo vale che il giorno corrente, volevo sapere se data la data e provare ad inserire queste opzioni veniva fuori un risultato accettabile, ho provato ma non mi funzionacodice:+%Y-%m-%d
Mi pare che siano due problemi; o meglio due tipi di soluzione alternativi per lo stesso problema.
Problema:
Data una variabile di tipo stringa:
$data = "17-lug-10";
trasformarla in "2010-07-17"
Prima soluzione: con le RE (e linguaggio Perl) - senza uso di funzioni data del Perl.Spero di non aver fatto errori. Non ho provato.codice:my $data = "17-lug-10"; my @mesi = ["","gen", "feb", ...]; #nota: per comodita` ho messo $mesi[0]="" che non corrisponde alla normale codifica in Perl # nota ulteriore: ho usato la codifica italiana - questo metodo e` applicabile a varie lingue $data ~= /(\d+?)\-(.+?)\-(\d+)/; my $gg = $1; my $mmm = $2; my $aa = $3; my $mm = 0; while ($mesi[$mm] != $mmm) { $mm++; } if ($mm > 12) { print "mese codificato in modo errato"; break; } } $mm = "0".$mm; $mm = substr($mm,-2); my $aaaa = "20".$aa; # al posto di questa si puo` controllare che $aa sia effettivamente di 2 cifre, ed agire con maggiore intelligenza print ($aaaa."-".$mm."-".$gg);
Seconda soluzione: con l'uso delle funzioni data.
Ora non ho tempo per pensarci. Mi pare di averle usate parecchio tempo fa per decodificare le date, ma ora non ricordo piu` che funzione avevo usato.
Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
No domande tecniche in messaggi privati
ciao
stavo cercando di risolvere un problema
dato un file, devo eliminare le righe uguali
ho provato ma non riesco
qualche soluzione??
RISOLTOOriginariamente inviato da basileus
ciao
stavo cercando di risolvere un problema
dato un file, devo eliminare le righe uguali
ho provato ma non riesco
qualche soluzione??
altro problemino
data una riga, per esempio la seguente
mi servirebbe accedere al valore 6655 incodice:<CentroA_104 CommonLineNumber="25" StationNumber="255" CommonAddressFieldLength="2" CommonAddress="6655">