Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Controllare Valore in TAG

    ciao

    ho dei files xml aventi il seguente tag

    <mese></mese>

    in alcuni i mesi da 1 a 9 sono scritti 01, 02 ecc... in altri sono scritti 1, 2, ecc

    esempio corretto

    <mese>05</mese>

    Esempio errato

    <mese>5</mese>

    Vorrei fare così

    Come posso controllare se il valore presente nel tag è sbagliato e apportare le correzioni, considerando che non ho altro per lavorare che Notepad++ e che non so programmare?

    Come posso fare questi controlli se non manualmente? Una forma normale aiuterebbe?

    Grazie a chi mi risponderà.

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, penso sia sufficiente un semplice "Sostituisci" (da tastiera Ctrl+H)

    Nella finestra di dialogo inserisci questi valori:

    Trova: <mese>0
    Sostituisci con: <mese>

    EDIT: spetta ho sbagliato, ti ho dato la soluzione per il problema inverso

    In tal caso bisogna andare di "Espressioni regolari".. faccio qualche prova e ti dico
    Ultima modifica di KillerWorm; 11-07-2016 a 12:45
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    ciao KillerWorm,

    purtroppo mi serve l'esatto contrario.

    In alcuni file ho il contenuto corretto ossia <mese>05</mese>
    in altri ho il contenuto errato <mese>5</mese>

    Devo identificare prima quelli con valore compreso tra 1 e 9, ma senza lo zero davanti altrimenti otterrei <mese>005</mese> oppure <mese>012</mese> mentre io devo lavorare solo con i tag errati e scartare quelli corretti o almeno non considerarli se lo zero prima del numero c'è.

    Grazie delle risposta :-)
    Stefano

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    purtroppo mi serve l'esatto contrario.
    Sì, mi sono reso conto dopo .. ho messo un edit sul post precedente

    Ok prova in questo modo:

    Trova: <mese>(\d)<
    Sostituisci con: <mese>0\1<

    Chiaramente come Tipo ricerca imposta Espressione regolare.
    Dovrebbe funzionare.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    ciao
    funziona perfettamente.

    Ho provato a modificarlo anche per altri tag e questo funziona per il tag <giorno> con il medesimo scopo

    Trova: <giorno>(\d)<
    Sostituisci con: <giorno>0\1\2\3<

    Non capisco perchè invece non funzioni in questo caso:
    Devo anteporre lo 0 a numeri di questo tipo 12083, 61095 ecc... che sono contenuti in tag e ho provato a fare così

    Trova: >(\d)</cod_
    Sostituisci con: >0</cod_

    Mi dice però che non lo trova, forse per numeri così grandi occorre cercare in un altro modo?

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Occhio, si tratta pur sempre di espressioni regolari. Se non conosci come scriverle e non capisci cosa fanno esattamente, ti sarà difficile farle funzionare provando "a caso". E' chiaro che ogni problema va studiato ed impostato opportunamente.

    Quello che hai fatto qui, ad esempio, non ha molto senso anche se magari ti funziona:
    Trova: <giorno>(\d)<
    Sostituisci con: <giorno>0\1\2\3<
    Sai cosa significa (\d)?
    Sai cosa fa \1?
    Perché hai inserito anche \2\3?

    Capisco che lo hai fatto andando ad intuito, ma in questo caso l'impostazione è sbagliata.

    Devo anteporre lo 0 a numeri di questo tipo 12083, 61095 ecc... che sono contenuti in tag
    Prova in questo modo:
    Trova: >[^0](\d*)</cod_
    Sostituisci con: >0\1</cod_
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  7. #7
    ciao
    allora l'esempio del giorno avevo messo \2\3 perchè penso di aver capito che (\d) = trova numero 0\1 = escludi se inizia con 1 senza zero. Quindi mi sono detto \2\3 perchè non mi interessa controllare tutti i giorni dal 10 al 31 (quindi tutti i numeri che che iniziano con 1, 2 e 3) tranne quelli da 1 a 9.
    Sì è un ragionamento incasinato e sono andato a intuito hai ragione.

    Infatti ho capito che (\d) trova numeri piccoli mentre a me serviva trovare numeri grandi (con più di una cifra) e infatti mi sono incartato ;-)

  8. #8
    Ciao

    ho provato questo codice

    >[^0](\d*)</cod_

    non ti avevo detto che dovrei ignorare i numeri che hanno da 6 cifre in su nella ricerca.

    Inoltre se faccio sostituisci con >0\1</cod_ mi rimpiazza la prima cifra con lo 0, mentre invece lo zero me lo deve aggiungere davanti (Es. 12083 deve diventare 012083, mentre invece ora diventa 02083).

    Grazie ancora della pazienza.
    Stefano

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Capisco che il tuo intento non sia quello di studiare le espressioni regolari ma potrebbe tornare utile in varie situazioni, come in questo caso, capirne il meccanismo di funzionamento. Eventualmente ti consiglio di sfogliare qualche guida, ad esempio questa; il contesto è PHP ma in generale il concetto e le specifiche di utilizzo per le regex sono pressoché uguali per qualsiasi linguaggio o applicazione in cui sono utilizzate, può cambiare giusto qualche regola sulla sintassi da utilizzare.

    Per chiarire riguardo il tuo specifico caso:

    \d è una forma speciale che sta per "digit", cioè indica di cercare una qualsiasi cifra numerica;
    () le parentesi tonde identificano un gruppo da catturare, per cui sul campo "Sostituisci" è possibile usare, ad esempio, la forma \1 (questa sintassi può variare a seconda del linguaggio o dell'applicazione utilizzata), per indicare di applicare, come stringa di sostituzione, ciò che viene restituito attraverso il primo gruppo di cattura;
    [^] questa sintassi indica di considerare qualsiasi carattere che sia diverso da quelli specificati tra le parentesi, dopo l'accento circonflesso ^. Nel caso specifico [^0] considera qualsiasi carattere diverso da 0.

    Riguardo l'ultimo esempio >[^0](\d*)</cod_, in effetti hai ragione, in questo caso sarà trovata una prima cifra che sia diversa da 0 (questo era per escludere i casi in cui il codice fosse già corretto, "ho pensato io"), ma questa non verrà considerata però nemmeno durante la sostituzione... qui il piccolo errore che può comunque essere risolto anche considerando ciò che hai indicato poi:
    non ti avevo detto che dovrei ignorare i numeri che hanno da 6 cifre in su nella ricerca.
    Una buona norma, quando si deve impostare un pattern per una espressione regolare, è quella di considerare da principio tutte le possibili specifiche del caso, così da poter formulare al meglio il pattern ed effettuare la ricerca nel modo più preciso possibile.

    Ad esempio, date le tue considerazioni, non mi è chiaro se tu possa incontrare quindi anche numeri con meno di 5 cifre.


    Alla luce di queste cose, qui sono considerati solo i numeri con 5 cifre, per i quali sarà aggiunto lo 0 davanti:
    Trova: >(\d{5}</cod_)
    Sostituisci con: >0\1
    Ultima modifica di KillerWorm; 12-07-2016 a 16:27
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  10. #10
    ciao,

    grazie davvero, sai ho subito applicato la tua soluzione e ho immediatamente individuato degli errori che mi erano sfuggiti a mano!

    Quello che non capisco è come mai nel caso del <mese>(\d)< mi considera solo i numeri da 1 a 9: se \d identifica un numero qualunque come mai non considera quelli da 10 in poi? Non credo che centrino in qualche modo le parentesi

    Quindi 0\1 = 0+"ciò che hai trovato", giusto?

    Ad esempio, date le tue considerazioni, non mi è chiaro se tu possa incontrare quindi anche numeri con meno di 5 cifre.
    Sì, tutti i numeri inferiori o uguali a 5 devono essere portati a 6 cifre aggiungendogli altrettanti 0 davanti. Potrei inoltre avere dei casi corretti, come da te correttamente supposto. Nel qual caso la cifra sarà di 6 cifre, comunque essa sia composta e quindi possiamo ignorarla.
    Ti ho detto da 6 cifre in su perché ho un altro tag con un nome simile, che però non voglio considerare, che ha al suo interno un numero di cifre superiore a 6.

    Avevo provato a guardare un po' online e ho fatto una serie di goffi tentativi ma senza risultati. Perciò grazie della guida, la guarderò appena possibile.

    Stefano

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 © 2025 vBulletin Solutions, Inc. All rights reserved.