webForumDet fria alternativet

Ta bort text mellan avgränsare

6 svar · 372 visningar · startad av Sebek

SebekMedlem sedan juni 20008 inlägg
#1

Hur gör jag för att ta bort en text som står i mellan tex <!--1--> och <!--2-->

se exempel

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "Hallå hallå denna text vill jag behålla<p>\n";

print "<!--1-->\n";
print "Denna text vill jag ta bort\n";
print "<!--2-->\n";

------------------
/Sebek

[Redigerat av Sebek den 06 jul 2000]

RobbanMedlem sedan dec. 19992 555 inlägg
#2

Inte riktigt säker på vad du är ute efter (skall man gå efter ditt exempel är det ju bara att låta bli att ha med den näst sista raden, så är ju allt mellan avgränsarna borta). :)

I ett tidigare inlägg postade jag ett sökscript, som letar efter avgränsarna <!-- drinkstart --> och <!-- drinkslut -->, och bearbetar det som står däremellan. Kan det möjligen vara till hjälp?

Annars får du gärna utöka problembeskrivningen lite.

------------------
Robban < robban@lipogram.com >

SebekMedlem sedan juni 20008 inlägg
#3

Alltså,

all text mellan två markerare (<!--1-->
och <!--2--> ) vill jag ta bort från en fil (test.txt).

------------------
/Sebek

RobbanMedlem sedan dec. 19992 555 inlägg
#4

Någonting åt det här hållet borde funka (förutsätter att filen du vill läsa från är öppnad med filhantaget READ, och att filen du vill skriva till är öppnad med filhantaget WRITE).

while (<READ> ) {
  print WRITE;
  if (/<!--1-->/) {
    while (<READ> ) {
      if (/<!--2-->/) {
        print WRITE;
        last;
      }
    }
  }
}

------------------
Robban < robban@lipogram.com >

RobbanMedlem sedan dec. 19992 555 inlägg
#5

Ovanstående förutsätter att markörerna står på egna rader, kanske bör nämnas. :)

SebekMedlem sedan juni 20008 inlägg
#6

Det funkade inte, om textfilen så ut så här när man körde

<!--1-->
Hej svejs
<!--2-->

så såg den ut så här efter körning

<!--1-->
Hej svejs
<!--2--><!--1-->
<!--2-->

------------------
/Sebek

[Redigerat av Sebek den 09 jul 2000]

[Redigerat av Sebek den 09 jul 2000]

RobbanMedlem sedan dec. 19992 555 inlägg
#7

Du måste skapa en ny, tom fil att skriva till. Verkar som du använt samma fil att läsa från som att skriva till?

Efter att den nya filen är färdigskriven kan du ersätta den gamla med den nya om du vill.

Följande korta testscript fungerar i.a.f. för mig:

#!/usr/bin/perl -w

open (READ, "<fil1.txt") or die;
open (WRITE, ">fil2.txt") or die;

while (<READ> ) {
  print WRITE;
  if (/<!--1-->/) {
    while (<READ> ) {
      if (/<!--2-->/) {
        print WRITE;
        last;
      }
    }
  }
}

close READ;
close WRITE;

Om fil1.txt innehåller:

Rad1
Rad2
<!--1-->
Rad3
Rad4
<!--2-->
Rad5
Rad6

Så innehåller fil2.txt efter körningen:

Rad1
Rad2
<!--1-->
<!--2-->
Rad5
Rad6

------------------
Robban < robban@lipogram.com >

[Redigerat av Robban den 09 jul 2000]

134 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)