Newsgroup: it.comp.os.win.windows10
Titolo: [OT] Lavorare su file di testo.

E' un po' OT perchč si potrebbe fare su qualsiasi sistema. Comunque il
mio problema č inserire delle stringe in un testo (parliamo di oltre
700'000 caratteri), all'inizio di paragrafi successivi a dei paragrafi
con inizio noto. Per la precisione, ho dei paragrafi che iniziano con
"śArt. xxx" ma che hanno una componente xxx non nota. Dopo tutti questi
paragrafi vorrei inserire la stringa "śA_" (starebbe per sottotitolo
articolo). La cosa si ripete per Titoli, Capi e Sezioni.
Una volta inserite le stringhe, passerei il testo ad un word processor
per formattarlo con gli stili.
Diciamo che mi sono prefissato di formattare testo specifico, ma la
problematica mi si ripropone periodicamente e vorrei trovare una
soluzione per automatizzare la formattazione/riformattazione dei testi.
 
-- 
Per rispondere, togliere -NOSPAM- dall'indirizzo.

 
 
Con notepad++ hai a disposizione le "regular expression" nel
 cerca& sostituisci, con cui credo si possa fare tranquillamente.
 
-- 
non firmo niente !

  cerca& sostituisci, con cui credo si possa fare tranquillamente.
 
E volendo rendere la cosa automatizzata/ripetibile, notepad++ permette
anche di registrare delle macro, per cui le varie operazioni potranno
essere registrate come macro, salvate e poi riutilizzate anche su altri
testi
 

 con inizio noto.
 
Powershell è tuo amico:
 
(Get-Content $fileName) | 
    Foreach-Object {
        $_ # send the current line to output
        if ($_ -match "(Art\. )[0-9]{3}") 
        {
            #Add Lines after the selected pattern 
            "Text To Add"
        }
    } | Set-Content $fileName
 
Tieni conto che -match indica un'espressione regolare, quindi sistemala come
ti serve
 
Enrico

 testi.
 
In aggiunta a notepad++, già proposto, esiste il porting
per windows del comando unix "sed" (StreamEDitor) che fa
questo mondo e quell'altro. E' sicuramente macchinoso (non
lo imparerò mai: ogni volta che ho un problema cerco in
rete ed esce la soluzione sotto forma di comando che non
so decifrare) ma potentissimo e secondo me l'intero
pacchetto di cui fa parte merita l'installazione.
 
 
-- 
Le banche hanno risposto a Conte sul "prestare
con amore". Hanno detto che per loro è solo sesso.
 

  cerca& sostituisci, con cui credo si possa fare tranquillamente.
Sě, č con quello che sto provando, ma non ho esperienza con le
espressioni regolari e non trovo come sostituire/inserire al paragrafo
successivo.
 
-- 
Per contattarmi, togliere -NOSPAM- dall'indirizzo.
To contact me, remove -NOSPAM- from address.

 per windows del comando unix "sed" (StreamEDitor) che fa
 
Cosa mi hai fatto ricordare !
 
Anni fa sed ed awk per me erano pane quotidiano :D !!!
 
 
 

 ti serve
Eh, è proprio qui il problema: non trovo l'espressione giusta.
Tra l'altro, il paragrafo con inizio noto ("¶Art. xxx) non ha un numero
di caratteri fisso... xxx possono essere 1, 2 o 3 caratteri. DIciamo 1
parola, in questo caso, ma non mi dispiacerebbe un espressione che
funzioni anche se xxx rappresenta un numero indefinito di parole.


 articolo).
 
 
ti hanno già suggerito Notepad++ quindi vai tranquillo
 
https://qastack.it/superuser/437652/notepad-how-to-replace-different-characters-with-corresponding-letters-at-once
 
 

successivo.
 
metti un pezzo del file di testo che usi, in modo che sia piu' chiaro per 
noi cosa hai e cosa vuoi ottenere.
 
per usare cerca&sostituisci devi riuscire a identificare in modo univoco 
cio' che delimita il testo da manipolare, un paragrafo dovrebbe essere 
delimitato dal punto (.) finale.
 
qui un esempio con anche il risultato, cioe' a fine "paragrafo" c'e' il 
nuovo testo
https://i.postimg.cc/ZqpgM71J/Cattura.png
 
 

 noi cosa hai e cosa vuoi ottenere.
 
Input:
 
śTitolo I Salute e sicurezza
śArt. 1
Disposizioni urgenti in materia di assistenza territoriale
1. Per l'anno 2020, al fine di rafforzare l'offerta sanitaria e
sociosanitaria territoriale, necessaria a fronteggiare l'emergenza
epidemiologica conseguente alla diffusione del virus SARS-Cov-2...
 
Output:
 
śTitolo I
śT_Salute e sicurezza
śArt. 1
śA_Disposizioni urgenti in materia di assistenza territoriale
1. Per l'anno 2020, al fine di rafforzare l'offerta sanitaria e
sociosanitaria territoriale, necessaria a fronteggiare l'emergenza
epidemiologica conseguente alla diffusione del virus SARS-Cov-2...
 
 
 
Ovviamente "1" puň essere anche "200".
Qui ci sono 2 sostituzione, io avevo scritto solo per l'articolo, nel
caso del titolo devo sostituire lo spazio dopo la parola "I" (che puň
essere anche "IIV" con un ritorno a capo seguito da "śT_".
 
Poi in LibreOffice applico gli stili ricercando le stringhe "ś...."


 un paragrafo dovrebbe essere delimitato dal punto (.) finale.
P.S. Io parlo di paragrafi come intesi nei wordprocessor, ovvero
delimitati da "ritorno a capo".



Con ricerca: ^(śArt.*)$
Sostituzione: \1(\rśA_)
 
Arrivo quasi al risultato, resta un ritorno a capo di troppo che potrei
togliere con una seconda sostituzione. Ma preferirei trovare il modo di
fare la sostituzione in un unico passaggio.


prova questo:
https://i.postimg.cc/jStww61g/Cattura.png
 
 
trova=¶([AT])([^ ]+ [0-9IVXLC]+)( |\r\n)
sostituisci=¶\1\2\n¶\1_
 
qui il manuale delle regular-expression
https://npp-user-manual.org/docs/searching/#regular-expressions
 
 

 
https://i.postimg.cc/jStww61g/Cattura.png
 
 
Beh, grazie. Studierň a partire da questo.
Ma dovrebbe eseguire entrambe le sostituzioni? Perché a me esegue solo
le sostituzioni sui Titoli.



 
dovrebbe   :-)
 
verifica il carattere di fine linea che hai nel tuo testo.
windows usa CRLF > trova=¶([AT])([^ ]+ [0-9IVXLC]+)( |\r\n)
linux usa solo LF    > trova=¶([AT])([^ ]+ [0-9IVXLC]+)( |\n) 
 

 linux usa solo LF    > trova=ś([AT])([^ ]+ [0-9IVXLC]+)( |\n) 
 
Cosě funziona ;-)
 
E con trova = ś([ASCT])([^ ]+ [0-9IVXLC]+)( |\n)
 
inserisco anche i "tag" per i sottotitoli delle sezioni e dei capi.
Ora mi resta da capirne la logica :-)


 funzioni anche se xxx rappresenta un numero indefinito di parole.
 
A livello di regex, .* prende tutto fino alla fine, ma sinceramente non mi
viene in mente nulla per fare in modo che xxx sia indefinito
 
Enrico

 mio problema è inserire delle stringe in un testo 
 
try
 
https://github.com/stefankueng/grepWin
 

 viene in mente nulla per fare in modo che xxx sia indefinito
Qualcuno che sull'argomento ne sa molto piů di me (Alfio), ha sugerito
trova = ś([ASCT])([^ ]+ [0-9IVXLC]+)( |\n)
e in un colpo solo modifico articoli, sezioni, capi e titoli. Vedi sopra
per i dettagli, appena ho un po' di tempo, voglio approfondire
l'argomento.


 Anni fa sed ed awk per me erano pane quotidiano :D !!!
 
 
^_^ Peccato che Linux sia così tanto indietro su cose che
a me servono; è quando si devono fare cose "assurde" come
questa del thread che la sua modularità dà una pista a
qualsiasi Windows :D
