Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [perl] SottoStringhe

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73

    SottoStringhe

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Tramite regular expression:
    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
    Se guardi nel man Perl trovi tre file sulle RE:
    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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    Originariamente inviato da Mich_
    Tramite regular expression:
    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
    Se guardi nel man Perl trovi tre file sulle RE:
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Forse vuoi che si cancellino gli zeri NON significativi ... altrimenti la domanda non ha senso.

    Prova una cosa del tipo:
    codice:
    $stringa="000.000.000";
    $stringa =~ s/(0{1-2})([1-9]??[0-9]??[\.$]){1}?/$2/;
    Nota che le slash che limitano la RE in questo caso sono tre, perche` richiesto dal s.

    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    codice:
    $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);
    data una cartella in cui all'interno ci sono file xml e non, volevo aprire progressivamente i file xml per farci delle operazioni
    cmq il problema è che mi dice "can't open xxx.xml nessun file at test.pl line 9"

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    Risolto, mi scordavo il my_dir

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    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 linux
    codice:
    date
    ti da la data e ora completa, po i attraverso varie opzioni come
    codice:
    +%Y-%m-%d
    mi 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 funziona

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    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.
    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);
    Spero di non aver fatto errori. Non ho provato.


    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

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    ciao
    stavo cercando di risolvere un problema

    dato un file, devo eliminare le righe uguali

    ho provato ma non riesco

    qualche soluzione??

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    73
    Originariamente 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??
    RISOLTO

    altro problemino

    data una riga, per esempio la seguente

    codice:
    <CentroA_104 CommonLineNumber="25" StationNumber="255"  CommonAddressFieldLength="2" CommonAddress="6655">
    mi servirebbe accedere al valore 6655 in

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.