Newsgroup: it.comp.software.editor
Titolo: eliminare righe da testo

ho un file doc di diverse centaia di pagine dove in alcune parti il
testo è intervallato da una riga di troppo, è possibile eliminare
queste righe in maniera automatica senza dover stare a cancellarle a
mano? grazie

 ho un file doc 
Intendi dire che e` in formato Word ?

Se il file e` in formato testo, potresti usare Vim:
 
http://www.vim.org/tips/tip.php?tip_id=372
ciao,
S.
-- 
Stefano Rodighiero      |  
http://larsen.perlmonk.org
mailto:
lar...@perl.it
   |  
http://www.perl.it

 
Io di solito suggerisco di usare Perl quando qualcuno chiede come fare
operazioni complesse sui file di testo... Tu fai il contrario :)
Io farei cosi':
$ perl -i.bak -ne 'print unless /^\s*$/' nomefile.txt
(Toglie tutte le righe vuote)
Ciao
gmax
-- 
   ____ ____  _____ _   _
  / _  |    \(____ ( \ / )
( (_| | | | / ___ |) X (
  \___ |_|_|_\_____(_/ \_)
(_____|
MySQL Certified Professional
Sapere, saper fare, fare, far sapere
http://gmax.oltrelinux.com

 (Toglie tutte le righe vuote)
Gia`. Questo e` un modo ben piu` flessibile. 


 (80k)
-- 
giardini di miro' - once again a fond farewell

 sort nomefile.txt | mawk "{!/^ *$/}" > nomefile.txt
Come mai il sort ?


 Come mai il sort ?
type nomefile.txt | mawk "{!/^ *$/}" > nomefile.txt
il sonno...
-- 
.signature: not found

strumento del programma... :)
Non so se la versione 2002 abbia migliorato la gestione dei "caratteri
jolly", in Word 97 la bella risposta è che non è possibile. Cioè, puoi fare
una ricerca e sostituzione normale, cercando, per esempio, "^p^p" (due fine
paragrafo, o a capo successivi, cioè una riga vuota) e sostituendoli con
"^p" (un solo fine paragrafo). Trascurando il fatto che questo ti può
cambiare anche la formattazione, non ti risolve comunque il caso "^p^p^p" o
"^p^p^p^p", in cui hai più a capo successivi; dovresti ripetere la ricerca
finché ti dice che non trova più "^p^p". O il caso "^p  ^p" in cui i fine
paragrafo siano separati da spazi, e qui è anche più complicato.
Se fai una ricerca con "usa caratteri jolly", che ti permette di
specificare cose come "qualunque numero di occorrenze del tale carattere",
e altre simpatiche cose, magicamente non sei più in grado di ricercare i
segni di fine paragrafo.
Si potrebbe forse fare un ricerca e sostituzione intermedia, che
sostituisca "^p" con una qualche sequenza di caratteri che non compare nel
testo e che è possibile specificare anche nella ricerca con caratteri
jolly; quindi fare la ricerca e sostituzione con caratteri jolly di questa
sequenza, riducendo qualsiasi numero di occorrenze ad una sola occorrenza;
quindi una ricerca e sostituizione che sostituisca la sequenza magica con
"^p", ripristinando i fine paragrafo.
Oppure si potrebbe convertire in RTF, e vedere se la cosa è risolubile da
lì, riaprendo il documento come "solo testo" e cercando \par.
Se il tuo utente è riuscito a leggere fin qui, senza mostrare evidenti
segni di stress, hai qualche possibilità che riesca a portare a termine
l'operazione.
Ciao.

 
intanto grazie per le risposte ;) allora, si è in formato word 2002,
non posso eliminare tutte le righe vuote perchè alcune servono,


 con caratteri jolly;
  E infatti utilizzo anche questo trucchetto...
  La macro di per se' non e` complessa, diciamo che e` un po' "lunga",
chesso`, forse un centinajo di  righe... Essendo in formato testo, non
sarebbe nemmeno un problema postarla qua...
  Cmq, il trucco e` quello di effettuare la sostituzione in sequenza:
1) ^p^p^p^p^p -> ^p
2) ^p^p^p^p -> ^p
3) ^p^p^p -> ^p
4) ^p^p -> ^p
  E questo vale  anche per gli spazii in piu`,  in particolare i doppi
spazi  che  ogni tanto  scappano...  e  ovviamente effettua  anche  un
controllo sul "  ^p" (spazio prima del paragrafo)...  insomma, si puo`
fare... Io, almeno, l'ho fatto... ;)
  Se interessa...
-- 
Cio` che ho scritto, ho scritto.

controllo sul "  ^p" (spazio prima del paragrafo)...
Finanto che puoi fare:
   $testo = $paragrafo->{Range}->{Text};
   if ($testo =~ /^\s*$/s) {$paragrafo->Delete()}
molte cose vanno a posto. Però è abbastanza noioso dover ricorrere a
conoscenze superiori per una cosa tutto sommato elementare come
l'eliminazione di righe vuote. Anche la domanda dell'OP, per come è
formulata, sembrava auspicare metodi un po' più alla portata di tutti.
Ciao.

 prima e spazio dopo).
Solo che nessumo le usa mai. :-(
-- 
Non capisco tutta questa eccitazione per il multitasking: io sono anni
che leggo in bagno.
                -- Carlo Landini

 metodi un po' più alla portata di tutti.
  Appunto. Io  lo facevo  con gli strumenti  a disposizione  di tutti,
cioe` macro salvate direttamente da  Word. Quella riga "stile perl" io
proprio non riuscirei a farla, con il VBA standard... magari!...


proprio non riuscirei a farla, con il VBA standard... magari!...
Non è "stile perl", è proprio perl. Ma ci si possono scrivere delle
fantastiche "macro" per Word. ;-)
Comunque, con un po' di pazienza, una qualche versione dello stesso
algoritmo si può utilizzare anche in VBA di Word:
    Public Sub CancellaParagrafiVuoti()
    Dim Trova As Find
    Dim Testo As Range
    Dim Paragrafi As Paragraphs
    Dim Par As Paragraph
    Dim NextPar As Paragraph
    Dim Fine As Long
    Dim Inizio As Long
    Set Paragrafi = ActiveDocument.Paragraphs
    Set Par = Paragrafi.First
    Do
        Set Testo = Par.Range
        Fine = Testo.End - 1
        Inizio = Testo.Start
        If Inizio <> Fine Then
            With Testo.Find
                .MatchWildcards = True
                .ClearFormatting
                .Forward = True
                .Wrap = wdFindStop
                .Text = " {1;}"
                .Execute
                If .Found And Testo.Start = Inizio And _
                         Testo.End = Fine Then
                    Set NextPar = Par.Next
                    Par.Range.Delete
                    Set Par = NextPar
                Else
                    Set Par = Par.Next
                End If
            End With
        Else
            Set NextPar = Par.Next
            Par.Range.Delete
            Set Par = NextPar
        End If
    Loop While IsObjectValid(Par)
    End Sub
Sicuramente si può migliorare, ma temo che sia destinato a restare un
po' aggrovigliato, per via di alcuni ineliminabili idiotismi di Word.
Ciao.

po' aggrovigliato, per via di alcuni ineliminabili idiotismi di Word.
Be', comunque senza alcuni dei *miei* idiotismi, è già un po' più
pulita:
    Public Sub CancellaParagrafiVuoti()
    Dim Trova As Find
    Dim Testo As Range
    Dim Paragrafi As Paragraphs
    Dim Par As Paragraph
    Dim regEx
    Dim NextPar As Paragraph
    Set Paragrafi = ActiveDocument.Paragraphs
    Set Par = Paragrafi.First
    Do
        Set Testo = Par.Range
        Fine = Testo.End - 1
        Inizio = Testo.Start
        Set NextPar = Par.Next
        If Inizio <> Fine Then
            With Testo.Find
                .MatchWildcards = True
                .ClearFormatting
                .Forward = True
                .Wrap = wdFindStop
                .Text = " {1;}"
                .Execute
                If .Found And Testo.Start = Inizio And _
                        Testo.End = Fine Then
                    Par.Range.Delete
                End If
            End With
        Else
            Par.Range.Delete
        End If
        Set Par = NextPar
    Loop While IsObjectValid(Par)
    End Sub
Ciao.

ringrazio, in ritardo, entrambi col trova e sostituisci si riesce a fare 
abbastanza semplicemente, ancora grazie
"DisKre Panza" <demo...@demokrito.org.asm> ha scritto nel messaggio 
news:slrnd30tla....@demokrito.org.asm...
