[vastaus aiempaan viestiin]
| Kirjoittaja: | Petri Palmu |
|---|---|
| Sähköposti: | - |
| Päiväys: | 5.2.2006 14:19 |
Kimmo Vehkalahti kirjoitti 3.2.2006 15:14 :
>En tiedä miksi haet ratkaisua "DOS"-tasolla. Useimmat asiat voi
>kuitenkin tehdä kätevämmin Survossa.
>
Ongelmaksi muodostuu muokattavien tiedostojen erit. leveys,
> 1000 merkkiä (johtuen pitkistä teksteistä ja itse kenttien
lukumäärästä).
Rivejä saattaa olla 50 000 - 100 000, mikä sinänsä ei ole Survon
toimituskentälle ongelma. Jotenkin tuntuu, että "LINEDEL" kannattaisi
toteuttaa "pinnan alla", kuten TXTCONV,...
Kun en muuta keksinyt, niin väänsin muutaman rivin Perl:iä
ongelmani ratkaisemiseksi.
(tulkin voi imuttaa ilmaiseksi http://www.perl.org/ ). Koodi ei
varmaankaan ole vähäisestä perl-kokemuksestani johtuen paras
mahdollinen, mutta näyttäisi suorittavan sille asetetun tehtävän.
Toki tuota voisi kehitellä huomattavasti yleisempiin tilanteisiin...
Perl-skripti
SAVEP CUR+1,CUR+20,poista.pl
#!c:\Perl\bin -w
#
use strict;
my $first_line = <STDIN> ; #
print "$first_line"; # kenttien nimirivi
my $count = 0 ; # laskuri poistetuille riveille
my $out_file = "count_deleted.txt" ; #
# ne rivit pois (tai skipataan), jotka alkavat "DATE" sanalla
while (<STDIN>) {
my $line = $_ ;
chomp($line); # poistaa mahd. rivinvaihdon rivin lopussa
if($line =~ "^DATE"){ # säännöllinen lauseke DATE-sana rivin alussa
$count = $count +1 ; next
}
print "$_" ;
}
open (OUT, ">$out_file") or die "Can't open $out_file: $!\n" ;
print OUT "$count" ;
close OUT
#
.....................
ESIM: Tiedostojen yhdistelyn jälkeen:
SAVEP CUR+1,CUR+13,txt1
DATE X Y
kkk kkk DATE
kkk k kk
DATE X Y
kk kk k
kk DATE k
k k k
DATE X Y
k k k
k k k
kk k k
DATE X Y
DATE X Y
Perl skriptin ajo:
>perl poista.pl < txt1 > txt2
Tulokset:
LOADP txt2,CUR+2
DATE X Y
kkk kkk DATE
kkk k kk
kk kk k
kk DATE k
k k k
k k k
k k k
kk k k
LOADP count_deleted.txt
4
Tarkoituksenani ei ollut millään tavoin "välttää" tekemästä
tätä vaihetta Survolla, kaiketi sen olisi pystynyt tekemään useammalla
tavalla, vaikkapa luuppaamalla FILE SAVE txt_i TO DATA ,
jossa i = 1,2,...,n . Joskin melkoisen pitkien tekstikenttien
lukemisessa olisi saattanut tulla hankaluuksia vastaan.
t. Petri
| Vastaukset: |
|---|
Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!