Avatar billede knh14 Nybegynder
11. maj 2010 - 18:59 Der er 7 kommentarer og
1 løsning

Slet alt pånær specifikke linjer

Hej eksperter.

Jeg arbejder ugentlig med en website bestående af rent tekst som er meget lang, ca. 100 sider.

Det eneste jeg skal bruge er det som står på en helt specific linje. Denne linje står i gråt, så jeg kan i kilden se at linjen starter med <font color="#999999" size="1">[Overskrift] </font>

Denne tekstfil, om det skal være word eller notepad er ligegyldig, men hvad er den hurtigste metode til at slette alt pånær linjer der starter sådan.

Jeg har ikke den store erfaring med visual basics eller makroer i det hele taget, men jeg går ud fra der må være en smart metode. Og er man nødt til at bruge makro, kan man lave avanceret søgning som fjerner det irrelevante.

Jeg arbejder desværre i Word 2003.

På forhånd tak.
Avatar billede Lene Fredborg Ekspert
11. maj 2010 - 23:38 #1
Et par opklarende spørgsmål:
Du taler om "linjer". Er det mon ikke afsnit (afsnit slutter med et afsnitstegn, som ligner et omvendt P, når formateringsmærker er slået til). Slutter den tekst, du skal finde, med "</font>" eller kommer der andet bagefter. Disse ting har betydning for, hvordan løsningen skal laves.

Du taler om "en specifik linje" og "linjer". Er der en eller flere forekomster?
Avatar billede knh14 Nybegynder
12. maj 2010 - 10:24 #2
Hej

Jeg beklager min mangelfulde forklaring, og har nu kigget lidt naermere på det. Det er i virkeligheden to afsnit, begge slutter med omvendt P med formateringsmærker.

Der er mange forekomster. Det er en samling af artikler, hvor jeg kun skal bruge overskrifterne.

Eksempel

<h3><strong>Overskrift</strong><br>
  <font color="#999999" size="1">[Overskrift 2] </font></h3>

Jeg kan leve med nederste afsnit, men ideelt ville være dem begge.

Mange tak
Avatar billede Lene Fredborg Ekspert
12. maj 2010 - 11:18 #3
Nedenstående makro skulle gøre det, du gerne vil under forudsætning af, at kildeteksten er tagget konsistent. Indsæt _kildeteksten_ i et Word-dokument og kør makroen. Så skulle du have kun have alle afsnit tilbage, der starter med "<h3><strong>" og/eller slutter med "</font></h3>". Se kommentarerne i selve makroen:

Sub BeholdVisseAfsnit_SletResten()
    Dim oPara As Paragraph
   
    'Undersøg alle afsnit, slet hvis ikke start er "<h3><strong>" eller slut er "</font></h3>"
    'Ellers gå videre
    For Each oPara In ActiveDocument.Paragraphs
        If Left(oPara.Range.Text, Len("<h3><strong>")) <> "<h3><strong>" And _
            Right(oPara.Range.Text, Len("</font></h3>")) <> "</font></h3>" Then
            'Slet afsnit
            oPara.Range.Delete
        End If
    Next oPara
    MsgBox "Færdig."
End Sub


Hvis du har brug for hjælp til at installere makroen, kan du se her:
http://www.gmayor.com/installing_macro.htm

Den slags opgaver kan altid løses på mange forskellige måder, og dette var ikke første forsøg…
Avatar billede knh14 Nybegynder
12. maj 2010 - 11:49 #4
Hej igen.

Mange tak.

Jeg har lidt problemer med den. Har det nogen indflydelse at word er engelsk/fransk version?

Jeg har indsat makroen og når den kører sletter den alt på linjen med <h3><strong>Overskrift</strong><br>

Altsaa den første del, men den sletter desværre også den vigtigere Overskrift2-afsnit.

Hvad gør jeg forkert?

Igen mange tak
Avatar billede Lene Fredborg Ekspert
12. maj 2010 - 12:13 #5
I denne sammenhæng betyder sprogversionen ikke noget.

Du gør sikkert ikke noget forkert.

Prøv at udskifte makroen med nedenstående version (kun linjen der startede med "Right" er udskiftet med linjen, der nu starter med "InStr"). Mit tag-eksempel til test var hentet her fra din post, og linjeskiftet var ikke det, der nok findes i din rigtige tekst:

Sub BeholdVisseAfsnit_SletResten()
    Dim oPara As Paragraph
   
    'Undersøg alle afsnit, slet hvis ikke start er "<h3><strong>" eller slut er "</font></h3>"
    'Ellers gå videre
    For Each oPara In ActiveDocument.Paragraphs
        If Left(oPara.Range.Text, Len("<h3><strong>")) <> "<h3><strong>" And _
            InStr(1, Right(oPara.Range.Text, Len("</font></h3>") + 1), "</font></h3>") = 0 Then
            'Slet afsnit
            oPara.Range.Delete
        End If
    Next oPara
    MsgBox "Færdig."
End Sub
Avatar billede knh14 Nybegynder
12. maj 2010 - 13:52 #6
Det ser ud til at virke. Mange tak.
Avatar billede knh14 Nybegynder
12. maj 2010 - 13:53 #7
Du skal vel svare for at få point, eller hvordan fungerer systemet?
Avatar billede Lene Fredborg Ekspert
12. maj 2010 - 14:21 #8
Ja, du får et svar her. Godt at det virker nu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester