ďťż
 
Skrypt przeszukujacy dwa pliki tekstowe i dopisujacy zadane znaki do drugiego pliku ďťż
 
Skrypt przeszukujacy dwa pliki tekstowe i dopisujacy zadane znaki do drugiego pliku
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Skrypt przeszukujacy dwa pliki tekstowe i dopisujacy zadane znaki do drugiego pliku



Pukas - 28-06-2006 01:15
Skrypt przeszukujacy dwa pliki tekstowe i dopisujacy zadane znaki do drugiego pliku
  Dzień dobry
Chciałem podziękować za pomoc w pisaniu tego skryptu, bez was nie
dal bym rady pewnie tego napisać( dokładny opis:

http://groups.google.pl/group/pl.com...c80e67a455e9a4

). Niestety teraz musze zmodyfikować istniejący skrypt tak aby
czytał dwa pliki i jeden z nich modyfikował, a miało by to
wyglądać tak :
operacje są dokonywane na dwóch plikach tekstowych, pierwszy z nich
jest plikiem tylko do odczytu i wygląda tak :

1 1 -2.5930E+08 -1.1393E+07 -2.9221E+07 -1.5604E+07
-3.0836E+06 2.6169E+08
2 1 -1.5113E+08 -5.3081E+06 -6.7720E+07 -7.9690E+06
-7.1801E+06 1.9560E+08
3 1 -6.1180E+07 -7.6683E+05 -9.4798E+07 -2.5004E+06
-1.0760E+07 1.8449E+08
4 1 4.4102E+07 9.0110E+06 -7.9293E+07 2.6747E+06
-1.0032E+07 1.4468E+08
5 1 1.2766E+08 7.3496E+06 -7.5612E+07 8.8286E+06
-1.2019E+07 1.7172E+08
6 1 3.4349E+08 6.2426E+07 1.6234E+07 2.0982E+07
3.7429E+06 2.4794E+08

pierwsza liczba w każdej linijce to liczbą porządkową następne to
parametry, ostatnia to liczna na podstawie której program ma ocenić
co zrobić z linijka o TYM SAMYM numerze na w drugim pliku tekstowym
..Drugi plik wygląda tak prawie identycznie jak pierwszy, ma tyle samo
linijek i 9 kolumn

1, 93, 297, 20, 1, 1424, 1628, 1351, 1332
2, 297, 298, 21, 20, 1628, 1629, 1352, 1351
3, 298, 299, 22, 21, 1629, 1630, 1353, 1352
4, 299, 300, 23, 22, 1630, 1631, 1354, 1353
5, 300, 301, 24, 23, 1631, 1632, 1355, 1354
6, 301, 302, 25, 24, 1632, 1633, 1356, 1355

Operacja wykonywana przez skrypt ma polegać na odczycie z pierwszego
pliku liczy porządkowej i porównaniu jej z wcześniej podanym
parametrem X ( równym np. X=1,2,4,6) jeśli X jest różne od liczby
porządkowej to należy sprawdzić ostatnia liczbę w linijce i
porównać ja z Y ( Y ma jedna wartość i jest równe np.
Y=1.717E+08), jeśli liczba ta jest większa od Y to skrypt powinien
wprowadzić zmianę w linijce o tym samym numerze w pliku numer dwa -
zmiana to wstawienie ** na początku linii, tak ze efekt końcowy
powinien wyglądać tak :
(plik numer 2)
1, 93, 297, 20, 1, 1424, 1628, 1351, 1332
** 2, 297, 298, 21, 20, 1628, 1629, 1352, 1351
3, 298, 299, 22, 21, 1629, 1630, 1353, 1352
4, 299, 300, 23, 22, 1630, 1631, 1354, 1353
** 5, 300, 301, 24, 23, 1631, 1632, 1355, 1354
6, 301, 302, 25, 24, 1632, 1633, 1356, 1355
plik numer 1 pozostaje niezmieniony
Wiem ze problem jest skomplikowany(przynajmniej dla mnie), w
książkach i kursach internetowych nie znalazłem nic co choćby
przypominało podobny problem .Szukałem tez na forach podobnych
rozwiązań, niestety bez efektu. Jak do tej pory próbuje
przekształcić skrypt napisany przez pana Michała Kurka w odpowiedzi
na mój poprzedni list.
Czy ktoś byłby w stanie pomoc mi w napisaniu takiego skryptu ?Albo
chociaż naprowadzić na właściwe rozwiązanie ?





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 28-06-2006 01:15

  Pukas wrote:

> Wiem ze problem jest skomplikowany(przynajmniej dla mnie), w
> książkach i kursach internetowych nie znalazłem nic co choćby
> przypominało podobny problem .Szukałem tez na forach podobnych
> rozwiązań, niestety bez efektu. Jak do tej pory próbuje
> przekształcić skrypt napisany przez pana Michała Kurka w odpowiedzi
> na mój poprzedni list.
> Czy ktoś byłby w stanie pomoc mi w napisaniu takiego skryptu ?Albo
> chociaż naprowadzić na właściwe rozwiązanie ?

Wczytaj pierwszy plik i do hasha lub tablicy o lp jako kluczu/indeksie
zapisz informacje czy maja być dopisane ** dla danej lp (z tego co
zrozumiałem, warunki mają być sprawdzane tylko na danych z pierwszego
pliku i zewnętrznych parametrów), wczytuj drugi linia po linii,
sprawdzaj czy ma dodać **, wynik zapisuj do TRZECIEGO plik. Skopiuj plik
trzeci na drugi.

--
P.M.




Pukas - 29-06-2006 00:44

 
> Wczytaj pierwszy plik i do hasha lub tablicy o lp jako kluczu/indeksie
> zapisz informacje czy maja być dopisane ** dla danej lp (z tego co
> zrozumiałem, warunki mają być sprawdzane tylko na danych z pierwszego
> pliku i zewnętrznych parametrów), wczytuj drugi linia po linii,
> sprawdzaj czy ma dodać **, wynik zapisuj do TRZECIEGO plik. Skopiuj plik
> trzeci na drugi.

Hmm, niestety nie wiem jak napisac taki skrypt, jestem zielony w perlu,
tzn. prostrze rzeczy potrafie zrobic ale to jest troche za
skomplikowane, narazie mam tylko lekko zmodyfikowany pierwszy skrypt:

#wprowadzam zmienne X

#print 'zaladowalem plik z numerami wezlow';
open(wezly, 'wezly.txt') || die "brak pliku z wezlami";

@wezly = <wezly>;

#wprowadzam druga zeminna Y

print 'podaj wartosc parametru misessa:';
$misess =<STDIN>;

open(IN,'in.txt') || die "$!\n";
open(OUT,'>'.'out.txt') || die "$!\n";

while (<IN>) {
my $line = $_;
s/\s+//g;
my @line = split(/,/,$_);

#print "$line[0]\n";
#print "$line[2]\n";

# tutaj warunki z X i Y :)
# jezeli spelnione to to wypisujemy gwiazdki
if(!grep($line[0]==$_, @wezly) && $line[8]>$misess) {

print OUT "**".$line;}

else{
print OUT $line;
}

}

close(IN);
close(OUT);
close(wezly);

wiesz moze jak to zmodyfikowac ?




Pukas - 29-06-2006 00:44

  hmm, kombinuje juz jak przyslowiowy koń pod górke... nie wiem co zle
robie ale skrypt nie dziala jak powinien ... prosze... pomocy:-)





Pukas - 04-07-2006 00:59

  hmm a jak podzielic taka linie na kolumny skoro nie ma przecinkow ?
1 1 -2.5930E+08 2.7504E+06 -1.1393E+07 -2.9221E+07
-1.5604E+07 -3.0836E+06 2.6169E+08




=?ISO-8859-2?Q?=A3ukasz_M=B1drzycki?= - 04-07-2006 00:59

  Pukas napisał(a):
> hmm a jak podzielic taka linie na kolumny skoro nie ma przecinkow ?
> 1 1 -2.5930E+08 2.7504E+06 -1.1393E+07 -2.9221E+07
> -1.5604E+07 -3.0836E+06 2.6169E+08

my $linia ='1 1 -2.5930E+08 2.7504E+06 -1.1393E+07 -2.9221E+07
-1.5604E+07 -3.0836E+06 2.6169E+08';
my @czesci = split / +/, $linia;

przy założeniu, ze $linia to jeden ciąg, bez przełamania linii.

pzdr,
luk

--
*- uksza(@)at(@)wp(.)dot(.)pl
*- RLU: #272802 | got slack?




Pukas - 04-07-2006 00:59

  probowalem zrobic cos takiego , aby czytal 2 pliki w tym samym czasie ,
czy to jest mozliwe ?
bo zrobione w ten sposob nie dziala

while (<IN>) {
my $line = $_;
s/\s+//g;
my @line = split(/,/,$_);

#print "$line[0]\n";
#print "$line[2]\n";

while(<drop>){
my $liness = $_;
s/\s+/,/g;
my @liness = split(/,/,$_);}

# tutaj warunki z X i Y :)
# jezeli spelnione to to wypisujemy gwiazdki
if(!grep($line[0]==$_, @wezly) && $liness[8]>$misess) {

print OUT "**".$line;
print OUT ".".$liness[3];




Maciej Misiak - 04-07-2006 00:59

  Łukasz Mądrzycki wrote:
> my @czesci = split / +/, $linia;

@czesci = split / /, $linia;
zadziała tak samo, ponieważ albowiem dlatego że / / w split działa
jak... yyy... wielospacja.

--
grizzley




Maciej Misiak - 04-07-2006 00:59

  Pukas wrote:
> probowalem zrobic cos takiego , aby czytal 2 pliki w tym samym czasie ,
> czy to jest mozliwe ?
> bo zrobione w ten sposob nie dziala
>
> while (<IN>) {
> my $line = $_;
> s/\s+//g;
> my @line = split(/,/,$_);
>
>
> #print "$line[0]\n";
> #print "$line[2]\n";

A ustaw no pozycję w pliku reprezentowanym przez drop na 0 w tym miejscu
i zobacz czy zadziała.

> while(<drop>){

--
grizzley




Pukas - 04-07-2006 00:59

 
> A ustaw no pozycję w pliku reprezentowanym przez drop na 0 w tym miejscu
> i zobacz czy zadziała.
>
> > while(<drop>){
>
>
> --
> grizzley

hmm dalej zadnego efektu, wie ktos moze czy wogule da sie zrobic cos
takiego jak w temacie ??????
nie wiem juz ile nad tym siedze, nie wiem czy to wogole zadziala :-/




Szymon =?iso-8859-2?Q?Sok=F3=B3?= - 04-07-2006 00:59

  On Mon, 03 Jul 2006 17:07:19 +0200, Maciej Misiak wrote:

> Łukasz Mądrzycki wrote:
>> my @czesci = split / +/, $linia;
>
> @czesci = split / /, $linia;
> zadziała tak samo, ponieważ albowiem dlatego że / / w split działa
> jak... yyy... wielospacja.

Nieprawdą jest, jakoby.
split ' ', $linia tak zadziała. Natomiast split / /, $linia nie.

As a special case, specifying a PATTERN of space (' ') will
split on white space just as "split" with no arguments does.
Thus, "split(' ')" can be used to emulate awk's default behav-
ior, whereas "split(/ /)" will give you as many null initial
fields as there are leading spaces. A "split" on "/\s+/" is
like a "split(' ')" except that any leading whitespace produces
a null first field.

--
Szymon Sokół (SS316-RIPE) -- Network Manager B
Computer Center, AGH - University of Science and Technology, Cracow, Poland O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F
Free speech includes the right not to listen, if not interested -- Heinlein H




Pukas - 04-07-2006 00:59

  aha ten segment troche sie rozjechal i powinien wygladac tak :
> 1 1 -2.5930E+08 -1.1393E+07 -2.9221E+07 -1.5604E+07 -3.0836E+06 2.6169E+08
> 2 1 -1.5113E+08 -5.3081E+06 -6.7720E+07 -7.9690E+06 -7.1801E+06 1.9560E+08
> 3 1 -6.1180E+07 -7.6683E+05 -9.4798E+07 -2.5004E+06 -1.0760E+07 1.8449E+08
> 4 1 4.4102E+07 9.0110E+06 -7.9293E+07 2.6747E+06 -1.0032E+07 1.4468E+08
> 5 1 1.2766E+08 7.3496E+06 -7.5612E+07 8.8286E+06 -1.2019E+07 1.7172E+08
> 6 1 3.4349E+08 6.2426E+07 1.6234E+07 2.0982E+07 3.7429E+06 2.4794E+08
oczywiscie wszystkie te liczby sa ulozone w kolumny




Maciej Misiak - 05-07-2006 01:12

  > On Mon, 03 Jul 2006 17:07:19 +0200, Maciej Misiak wrote:
>
> > Łukasz Mądrzycki wrote:
> >> my @czesci = split / +/, $linia;
> >
> > @czesci = split / /, $linia;
> > zadziała tak samo, ponieważ albowiem dlatego że / / w split działa
> > jak... yyy... wielospacja.
>
> Nieprawdą jest, jakoby.
> split ' ', $linia tak zadziała. Natomiast split / /, $linia nie.

Racja.

--
grizzley

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl




Pukas - 05-07-2006 01:12

  Ok tqm polecil mi takie rozwiazenie tego problemu :
#!/usr/bin/perl -Tw
use strict;
use vars qw/%test %modify $Y/;

# usage
if ($#ARGV < 2) {
print "Usage:\n\t wezly.pl <in-tested.txt> <in-changed.txt>
<nodes-skip.txt>\n";
exit 0;
}

# load data
if (open (FH, $ARGV[0])) {
while (<FH>) {
chomp;
next if (!/^\d/);
my @tmp = split(/\s+/);
$test{$tmp[0]} = $tmp[$#tmp];
}
close (FH);
} else {
die "Can't open file $ARGV[0]: $!\n";
}

if (open (FH, $ARGV[1])) {
while (<FH>) {
chomp;
next if (!/^\d/);
m/^(\d+)/;
$modify{$1} = $_;
}
close (FH);
} else {
die "Can't open file $ARGV[1]: $!\n";
}

if (open (FH, $ARGV[2])) {
while (<FH>) {
chomp;
next if (!/^\d$/);
delete $test{$_};
}
close (FH);
} else {
die "Can't open file $ARGV[2]: $!\n";
}

# get Y
print "Y = ";
chomp(my $Y=<STDIN>);

# do testing on what has left after loading nodes list
foreach my $node (keys %test) {
$test{$node} > $Y ? $modify{$node} = '** ' . $modify{$node} :
undef;
}

# print results to STDOUT (yup! be flexible and redy to be redirected!)
open (FH, '>wezly-out.txt') || die "Can't open output file: $!\n";
foreach my $node (sort keys %modify) {
print FH "$modify{$node}\n";
}
close (FH);

hmm, nic z tego nie rozumiem , wiem tylko ze pod win xp nie dziala ,
moze ktos mi poradzic dlaczego ?




Maciej Misiak - 06-07-2006 01:02

  >
> hmm, nic z tego nie rozumiem , wiem tylko ze pod win xp nie dziala ,
> moze ktos mi poradzic dlaczego ?

Mi działa.

--
grizzley

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl




Pukas - 06-07-2006 01:02

 
Maciej Misiak napisał(a):
> >
> > hmm, nic z tego nie rozumiem , wiem tylko ze pod win xp nie dziala ,
> > moze ktos mi poradzic dlaczego ?
>
> Mi działa.
>
> --
> grizzley

ciekawe gdzie ja robie blad , albo w czym tkwi roznica




grizzley@op.pl - 06-07-2006 01:02

  > > Mi działa.
>
> ciekawe gdzie ja robie blad , albo w czym tkwi roznica

Ja zrobiłem tak: skopiowałem kod programu do pliku s.pl, potem dane wejściowe
--- poczatek
1 1 -2.5930E+08 -1.1393E+07 -2.9221E+07 -1.5604E+07 -3.0836E+06 2.6169E+08
2 1 -1.5113E+08 -5.3081E+06 -6.7720E+07 -7.9690E+06 -7.1801E+06 1.9560E+08
3 1 -6.1180E+07 -7.6683E+05 -9.4798E+07 -2.5004E+06 -1.0760E+07 1.8449E+08
4 1 4.4102E+07 9.0110E+06 -7.9293E+07 2.6747E+06 -1.0032E+07 1.4468E+08
5 1 1.2766E+08 7.3496E+06 -7.5612E+07 8.8286E+06 -1.2019E+07 1.7172E+08
6 1 3.4349E+08 6.2426E+07 1.6234E+07 2.0982E+07 3.7429E+06 2.4794E+08
--- koniec
do pliku a.txt

--- poczatek
1, 93, 297, 20, 1, 1424, 1628, 1351, 1332
2, 297, 298, 21, 20, 1628, 1629, 1352, 1351
3, 298, 299, 22, 21, 1629, 1630, 1353, 1352
4, 299, 300, 23, 22, 1630, 1631, 1354, 1353
5, 300, 301, 24, 23, 1631, 1632, 1355, 1354
6, 301, 302, 25, 24, 1632, 1633, 1356, 1355
--- koniec
do pliku b.txt

oraz
--- poczatek
6
--- koniec

do pliku c.txt
i uruchomiłem tak:

c:\scripts>s.pl a.txt b.txt c.txt
"-T" is on the #! line, it must also be used on the command line at c:\scripts\p
ukas\s.pl line 1.

c:\scripts>perl -T s.pl a.txt b.txt c.txt
Y = 2.0E+08

c:\scripts>

Wynik:
--- poczatek
** 1, 93, 297, 20, 1, 1424, 1628, 1351, 1332
2, 297, 298, 21, 20, 1628, 1629, 1352, 1351
3, 298, 299, 22, 21, 1629, 1630, 1353, 1352
4, 299, 300, 23, 22, 1630, 1631, 1354, 1353
5, 300, 301, 24, 23, 1631, 1632, 1355, 1354
6, 301, 302, 25, 24, 1632, 1633, 1356, 1355
--- koniec

--
grizzley

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Skrypt fotka.pl/sympatia.pl Skrypt na backup (MSSQL2000) i restore (MSSQL2005) =?ISO-8859-2?Q?[Oracle]_Wywo=B3anie_skryptu_sh_z_PL/SQL-a=3F=3F?= używam czcionki wielkości 1296 pt na pliku o wielkości 800x600 potrzebny skrypt do wysylania faktury pro-forma na adres klienta kto zrobi? =?iso-8859-2?q?Pro=B6ba_o_konwersj=EA_pliku_CDR_do_wersji_11_ lub_ni=BFszej?= [MySQL]: Odzyskanie z pliku zawierającego wiele baz danych tylko jednej wybranej bazy [Sprzedam] Zaawansowany skrypt do obsługi płatnych reklam za SMS poszukuje skryptu dzialajacego jak www.centrum-modelek.pl migracja skryptu SQL z Interbase do MSSQL 2005 Exp.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • tejsza.htw.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com