Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Tekstin poisto kohtien a ja b välistä

JussiR [12.03.2010 11:24:58]

#

Moi,

Jos mulla on 75 000 rivinen tiedosto, jossa on lähes joka rivillä teksti "<xx>36/453/3450</xx>" ja noiden tagien välissä oleva teksti ei pysy samana, niin miten saisin - ei pelkästään tagien välissä olevan tekstin, vaan myös itse tagit - pois?

Googlella löysin jonkun softan, joka pyysi maksua kun oli tehnyt puoleen väliin. Kai sitä vois sitten ajaa sen tiedoston kahdessa osassa, mutta onko tuolle joku helpompi tapa..?

Linuxissa tais olla jokin sed-komento? Mulla on W7 käytössä..

Onko jossain tekstieditorissa mahdollisuus tehdä noin? Vai alanko koodaamaan VB:llä jotain systeemiä?

Metabolix [12.03.2010 11:41:06]

#

No tuohan on triviaali koodata melkein millä tahansa kielellä. Erityisen helppo korvaus on säännöllisillä lausekkeilla, esimerkiksi PHP:ssä preg_replace-funktiolla.

<?php
$s = file_get_contents("tiedosto.txt");
$s = preg_replace("#<xx>.*?</xx>#", "", $s);
file_put_contents("tiedosto2.txt", $s);

Myös erittäin monet tekstieditorit tukevat säännöllisiä lausekkeita.

Chiman [12.03.2010 12:17:18]

#

Notepad++ taitaa olla hyvä editori Windows-ympäristöön, tuohonkin tarkoitukseen.

Tässä huvikseen vielä Pythonilla sama korvaus, puskuroidulla lukemisella, joten isokaan tiedosto ei haittaa:

from re import sub

with open('alkup.txt') as alkup:
    with open('tulos.txt', 'w') as tulos:
        for rivi in alkup:
            tulos.write(sub(r'<xx>.*?</xx>', '', rivi))

JussiR [12.03.2010 12:19:13]

#

Muistatko yhdenkään tuollaisen tekstieditorin nimeä? En osaa googlettaa kun en tiedä mikä tuo on englanniksi.

Tuo php koodi heittää: "Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 12204783 bytes) in /preg.php on line 3"

EDIT:
Chiman: kiitos! Mulla on notepad++ mutta pitäis kai tutustua manuaaliin..
EDIT:
Sain tehtyä tuon textpadin makrolla. Laitoin sen vaan hakemaan tekstin "<xx>" ja painamaan nuolta vasemmalle ja sen jälkeen shift+end ja delete. Kun nuo oli sopivasti aina "lauseen" lopussa.

Tuossa se pyörii...

Chiman [12.03.2010 12:24:28]

#

Google-haku notepad++ regexp replace tuotti tämän:
http://breakintheweb.wordpress.com/2009/07/13/notepad-and-regex/

Eli valitse tuolta Regular expression, Find what: <xx>.*?</xx> ja jätä Replace with -kohta tyhjäksi. Klikkaa sitten Replace All.

Metabolix [12.03.2010 12:25:26]

#

JussiR kirjoitti:

En osaa googlettaa kun en tiedä mikä tuo on englanniksi.

Regular expressions. Tämänkin olisit Googlella saanut selville, koska suomenkielisellä sanalla päätyy mm. Wikipediaan.

Mainitsemasi sed löytyy Windowsillekin. Korvaus onnistuu esimerkiksi näin:

sed "s/<xx>[^<]*<\/xx>//g" sisaan.txt > ulos.txt

JussiR [12.03.2010 12:26:35]

#

Kiitos! Tämä homma on nyt selvä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta