Re: Tiedostojen yhdistely ja siivous

[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:
[ei vastauksia]

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!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.