Kirjoittaja Aihe: "Etsi ja korvaa":n automatisointi ??  (Luettu 4995 kertaa)

valtsu68

  • Käyttäjä
  • Viestejä: 453
  • Aloitteleva peruskäyttäjä
    • Profiili
"Etsi ja korvaa":n automatisointi ??
« : 10.10.09 - klo:11.50 »
Tere taas

Kun selaimesta on kopioinut haluamansa tiedot Gedit:iin ja haluaa siellä korvata tabulaattoreita, entereitä, välejä ja kaksoispisteitä niin, että saa tiedot sopivaan muotoon taulukkolaskentaan vietäväksi, on tämä toimenpide käsin tehtävä; käsin tehdessä voi tulla variaatioita korvausten suhteen joka lisää jälleen työmäärää.

Koska haluan päästä helpommalla, mielellään tosi helpolla ;-D, joudunko opettelemaan jonkin tasoisen skriptinkirjoitustaidon saadakseni koneen tekemään haluamani korvaukset kyseiseen tekstiin?

Ajattelemani gadgetin pitäisi kysellä muutama etsi-korvaa pari ja ne olisi kiva pystyä tallentamaan jotenkin uusiokäyttöä varten. Etsintä-korvaus voitaisiin tehdä mieluiten avoimeen tallentamattomaan tekstiasiakirjaan, mutta ei suurta haittaa ole vaikka teksti pitäisi olla tallennetussa tiedostossa. Korvaukset voisivat tallentua jo tallennettuun, uuteen tai siihen tallentamattomaan asiakirjaan.

Kenelläkään vinkkejä miten päästään alkuun?

snifi

  • Vieras
Vs: "Etsi ja korvaa":n automatisointi ??
« Vastaus #1 : 10.10.09 - klo:14.23 »
Itse olen käyttänyt komentoriviltä seuraavaa python-skriptiä:

Koodia: [Valitse]
#!/usr/bin/python

"""
argumentit muodossa:
tchange ":" "(.*)\.$:\1*:a:A" MumintroloExple001.txt >testi0505.txt
tchange ":" "\n:" poistaa rivinvaihdot
tchange ":" "^\n:" poistaa tyhjat rivit
"""

import re
import sys

arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]


p1 = re.compile(arg1)
parit = p1.split(arg2)

avaimet = parit[::2]
arvot = parit[1::2]

f = open(arg3)
lines = f.readlines()
f.close()

c = ""

for r in lines:
 if (arg1=="lower"):
  r = r.lower()
 if (arg1=="upper"):
  r = r.upper()
 for a,b in zip(avaimet, arvot):
  p2 = re.compile(a)
  r = p2.sub(b,r)
 c = c + r

print c

Käytännössä muunnettavat elementit annetaan säännöllisinä lausekkeina erotettuina kaksoispisteellä ":", vuorotellen pareittain. Tämän lausekkeen kun otat aina talteen, niin vähitellen sinulle kerääntyy kokoelma erilaisia vaihtoehtoja.
« Viimeksi muokattu: 10.10.09 - klo:14.26 kirjoittanut snifi »

K-Veikko

  • Käyttäjä
  • Viestejä: 309
    • Profiili
Vs: "Etsi ja korvaa":n automatisointi ??
« Vastaus #2 : 11.10.09 - klo:01.53 »
... Gedit ...

Itse käytän nimen omaan Gedit:iä.
Koodia: [Valitse]
ctrl+h

Rivinvaihto on \n ja tabulaattori on \t
ehkä muitakin löytyy, mutta en ole tarvinnut.
Helppo kokeilla, koska "ctrl + z" peruu edellisen korjauksen ja ikkunan alareunassa näkyy osumien lukumäärä.

Huomaa myös kätevä -> Muokkaa -> Lajittele -toiminto.
Kun ensin valitset tekstin hiirellä (myös rivinvaihdon tai tab'in) ja sitten näppäilet "ctrl + h" niin vaihdettava teksti on jo valmiina ruudussa.

http://library.gnome.org/users/gedit/stable/index.html.fi
http://library.gnome.org/users/gedit/stable/index.html.en

http://library.gnome.org/users/gedit/stable/gedit-find-escapes.html.fi
« Viimeksi muokattu: 11.10.09 - klo:02.51 kirjoittanut K-Veikko »

valtsu68

  • Käyttäjä
  • Viestejä: 453
  • Aloitteleva peruskäyttäjä
    • Profiili
Vs: "Etsi ja korvaa":n automatisointi ??
« Vastaus #3 : 11.10.09 - klo:08.37 »

Käytännössä muunnettavat elementit annetaan säännöllisinä lausekkeina erotettuina kaksoispisteellä ":", vuorotellen pareittain. Tämän lausekkeen kun otat aina talteen, niin vähitellen sinulle kerääntyy kokoelma erilaisia vaihtoehtoja.



Huomaa myös kätevä -> Muokkaa -> Lajittele -toiminto.


Kiitoksia vinkeistä.

Jatkoin etsimistä, ennen näiden vastausten lukemista, ja löysin Googlen Linux-haulla, (www.google.com/linux), ohjelman nimeltä "Sed".

Siitä on juttua myös http://linux.fi/wiki/Sed ja haulla siitä löytyy vaikka kuinka paljon tietoa. Siitä on kai kirjoitettu kirjakin tai useampi ;-D.

Tässäkin tapauksessa kävi niin kuin nykyään usein käy; haluttu "juttu" on olemassa, se täytyy vaan löytää tsiljoonan tiedon joukosta.

valtsu68

  • Käyttäjä
  • Viestejä: 453
  • Aloitteleva peruskäyttäjä
    • Profiili
Vs: "Etsi ja korvaa":n automatisointi ??
« Vastaus #4 : 11.10.09 - klo:19.17 »
...haluttu "juttu" on olemassa, se täytyy vaan löytää tsiljoonan tiedon joukosta.

Ei voi kun lainata itseään..., nyt tarttis löytää taas yksi juttu.

Mitenkähän Sed:illä tai jollain vastaavalla saadaan kaksi tai useampi rivi yhdistettyä yhdeksi, jotta sen yhdistetyn rivin voi tuoda näppärästi taulukkolaskentaan?

Harjoittelin tuota Sed:iä ja kelpo työkalu se on, mutta en sitten löytänyt ohjetta tuon yhdistyksen tekemiseksi. Vastaavia kysymyksiä löytyi maailmalta, mutta ei siellä ratkaisua ollut; Perliä joku tarjosi toiselle, mutta karkaako homma sitten jo käsistä(ni)?  :)

K-Veikko

  • Käyttäjä
  • Viestejä: 309
    • Profiili
Vs: "Etsi ja korvaa":n automatisointi ??
« Vastaus #5 : 11.10.09 - klo:20.49 »

Mitenkähän Sed:illä tai jollain vastaavalla saadaan kaksi tai useampi rivi yhdistettyä yhdeksi, jotta sen yhdistetyn rivin voi tuoda näppärästi taulukkolaskentaan?

Sama ongelma itsellä.

Olen kiertänyt ongelmaa avaamalla (copy-pastettamalla) tiedoston esim openofficessa ja sieltä siirtämällä tai suoraan editoimalla sitten saanut aikaan haluamani tiedostomuodon.

Myös sillä on merkitystä mistä ohjelmasta copy-pastetat tiedot; firefox, opera tai netscape (sea-monkey) antavat monesti aivan erilaisen tuloksen.

Vinkki openofficeen: -> help -> "regular expressions"
« Viimeksi muokattu: 11.10.09 - klo:20.51 kirjoittanut K-Veikko »

snifi

  • Vieras
Vs: "Etsi ja korvaa":n automatisointi ??
« Vastaus #6 : 11.10.09 - klo:20.58 »
Se varmaan kannattaisi tehdä välitulostuksen kautta. Jos tuolla ylläolevalla Python-ohjelmalla haluaisit tehdä sen, niin se näyttäisi esim. tältä:

Koodia: [Valitse]
tchange ":" "\n:<newline>" tiedosto.txt >tmp.txt
tchange ":" "(.*?)<newline>(.*?)<newline>:\1 \2\n:<newline>:\n" tmp.txt

En itse muista ihan tarkkaan Sedin syntaksia, mutta säännölliset lauseet varmaan löydät tuosta. Periaatteessa muutetaan ensin rivinvaihdot \n väliaikaisesti muotoon <newline>, sitten (.*?) mikä tahansa merkki, toistuu miten monta kertaa hyvänsä, mutta kuitenkin lyhyin osuma. Sulkeet tarkoittavat että tästä tulee ryhmä numero 1, johon voi myöhemmin viitata merkinnällä \1. Sen jälkeen tulee ensimmäinen <newline>,sitten tulee toinen ryhmä, ryhmä \2. Mahdollinen viimeinen pariton rivi täytyy vielä hoitaa erikseen: <newline>:\n

Jos haluat liittää kolme riviä niin toistat vain kuvion (.*?)<newline> kolmanteen kertaan, ja viittaat siihen ryhmän tunnuksella \3.

Sedin ohjeissa muistaakseni oli erityissyntaksi tällaista varten, mutta en jaksa nyt alkaa etsimään sitä.
« Viimeksi muokattu: 11.10.09 - klo:21.10 kirjoittanut snifi »

valtsu68

  • Käyttäjä
  • Viestejä: 453
  • Aloitteleva peruskäyttäjä
    • Profiili
Vs: "Etsi ja korvaa":n automatisointi ??
« Vastaus #7 : 11.10.09 - klo:21.36 »

Olen kiertänyt ongelmaa avaamalla (copy-pastettamalla) tiedoston esim openofficessa ja sieltä siirtämällä tai suoraan editoimalla sitten saanut aikaan haluamani tiedostomuodon.


Meillähän on ihan samat harrastukset  ;D. Onhan se jo aika tehokasta, ja tavallaan mielenkiintoista, tuolla etsi ja korvaa:lla pieksää tiedot oikeaan muotoon. Tuo OOfficen Etsi ja Korvaa on varmasti hyvä, kunhan siihen perehtyy. Oma kärsivällisyys ei sen opetteluun ole vielä riittänyt.


Itse käytän nimen omaan Gedit:iä.
 
Koodia: [Valitse]
ctrl+h

Rivinvaihto on \n ja tabulaattori on \t

Huomaa myös kätevä -> Muokkaa -> Lajittele -toiminto.
Kun ensin valitset tekstin hiirellä (myös rivinvaihdon tai tab'in) ja sitten näppäilet "ctrl + h" niin vaihdettava teksti on jo valmiina ruudussa.


Juuri tällä tyylillä olen jaksanut tähän asti


Myös sillä on merkitystä mistä ohjelmasta copy-pastetat tiedot; firefox, opera tai netscape (sea-monkey) antavat monesti aivan erilaisen tuloksen.


Niin on eroja. Oletkos vielä joutunut kopioimaan pdf:ästä? Ainakin viimeksi,(on toki jo aikaa), kun Evince:stä jouduin kopioimaan satunnaisesta pdf:ästä, niin taisin nostaa kädet pystyyn jatkoa ajatellen. Oli aika hirveää, kun ei välittänyt palstajaosta mitään, vaan tekstit tulivat laidasta laitaan...


Se varmaan kannattaisi tehdä välitulostuksen kautta. Jos tuolla ylläolevalla Python-ohjelmalla haluaisit tehdä sen, niin se näyttäisi esim. tältä:

Koodia: [Valitse]
tchange ":" "\n:<newline>" tiedosto.txt >tmp.txt
tchange ":" "(.*?)<newline>(.*?)<newline>:\1 \2\n:<newline>:\n" tmp.txt


Alkaa vaikuttamaan siltä, että tuon joutuu opettelemaan..


En itse muista ihan tarkkaan Sedin syntaksia, mutta säännölliset lauseet varmaan löydät tuosta. Periaatteessa muutetaan ensin rivinvaihdot \n väliaikaisesti muotoon <newline>, sitten (.*?) mikä tahansa merkki, toistuu miten monta kertaa hyvänsä, mutta kuitenkin lyhyin osuma. Sulkeet tarkoittavat että tästä tulee ryhmä numero 1, johon voi myöhemmin viitata merkinnällä \1. Sen jälkeen tulee ensimmäinen <newline>,sitten tulee toinen ryhmä, ryhmä \2. Mahdollinen viimeinen pariton rivi täytyy vielä hoitaa erikseen: <newline>:\n

Jos haluat liittää kolme riviä niin toistat vain kuvion (.*?)<newline> kolmanteen kertaan, ja viittaat siihen ryhmän tunnuksella \3.

Sedin ohjeissa muistaakseni oli erityissyntaksi tällaista varten, mutta en jaksa nyt alkaa etsimään sitä.


Huh :), kohta joudun kokeilemaan tuota. Sellaisen huomion tein tuon Sed / Gedit -parivaljakon kanssa, että Sedillä voi lisätä rivejä vaikka välilyöntien tilalle käskyllä
Koodia: [Valitse]
s/ /\n/g
...mutta jos koettaa poistaa rivinvaihtoja niin tuo \n ei tehoa ollenkaan. Päivä on luettu ja kokeiltu, mutta ei vielä ole sattunut ratkaisu kohdalleen.



K-Veikko

  • Käyttäjä
  • Viestejä: 309
    • Profiili
Vs: "Etsi ja korvaa":n automatisointi ??
« Vastaus #8 : 12.10.09 - klo:19.21 »
.pdf tiedostot ovatkin jo kokonaan oma ongelmansa. Melkein pakko on asentaa Adoben Acrobat Reader, jotta saa nopeasti kunnollista jälkeä.
- acroread

Lähes kaikki artikkelit täällä
http://suometar.wordpress.com/
olen copy-pastettamalla alun perin laittanut, sitten geditillä korjaillut ja joput manuaalisesti.

Tämä ketju innosti tutustumaan geditiin lähemmin. Plugineja löytyy
http://linuxhub.net/2009/08/gedit-plugins-extension-and-customization-guide/

Ja epävirallisia plugineja
http://live.gnome.org/Gedit/Plugins#third_party

En ole löytänyt optiota miten geditin saisi käynnistymään, siten että -> "Työkalut" -> "Automaattinen oikoluku" olisi oletuksena päällä.
(Vaikea hakea helppiä näihin suomenkielisiin versioihin jos ei satu tietämään ilmaisun tarkkaa englanninkielistä vastinetta.)

valtsu68

  • Käyttäjä
  • Viestejä: 453
  • Aloitteleva peruskäyttäjä
    • Profiili
Vs: "Etsi ja korvaa":n automatisointi ??
« Vastaus #9 : 12.10.09 - klo:21.14 »
.pdf tiedostot ovatkin jo kokonaan oma ongelmansa. Melkein pakko on asentaa Adoben Acrobat Reader, jotta saa nopeasti kunnollista jälkeä.
- acroread

:), minä kun kokeilin kaikki pdf-sovellukset mitä Lisää/poista:ssa oli tarjolla, eikä niistä mikään helpottanut. Pitää panna mieleen tuo vastaisen varalle.



Lähes kaikki artikkelit täällä
http://suometar.wordpress.com/
olen copy-pastettamalla alun perin laittanut, sitten geditillä korjaillut ja joput manuaalisesti.


Onpas ollut työmaa. Tuo ei ole ollut mikään viikon työ :)


Tämä ketju innosti tutustumaan geditiin lähemmin. Plugineja löytyy
http://linuxhub.net/2009/08/gedit-plugins-extension-and-customization-guide/

Ja epävirallisia plugineja
http://live.gnome.org/Gedit/Plugins#third_party

En ole löytänyt optiota miten geditin saisi käynnistymään, siten että -> "Työkalut" -> "Automaattinen oikoluku" olisi oletuksena päällä.
(Vaikea hakea helppiä näihin suomenkielisiin versioihin jos ei satu tietämään ilmaisun tarkkaa englanninkielistä vastinetta.)

Tsiisus, on siinä tarjolla vaikka ja mitä. Olisihan tämä helpompaa, jos olisi Enklanti äidinkielenä. :(