Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Syswrite funkcija.

[es] :: Perl :: Syswrite funkcija.

[ Pregleda: 2964 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Free_Sex
Aleksandar
Beograd

Član broj: 9601
Poruke: 616
*.vdial.verat.net



Profil

icon Syswrite funkcija.02.02.2004. u 19:35 - pre 246 meseci
Imam problema sa doticnom ... evo coda ;

Code:

#!perl
print "Just started !\n ";
open (in,"ip-to-country.csv");
@file=<in>;
close in;
open (out,"+<ip-twoletters.bin");
open (out2,">ip-country.dat");
$space="        ";
foreach $line (@file){
    chop($line);
    ($start,$end,$twoletters,$treeletters,$country)=split(/\Q","\E/,$line);
    chop($country);
    $start = substr($start,1);
    $zaupis = join (";",$start, $end ,$twoletters);
    syswrite (out,$zaupis,30);
    print out2 $twoletters ,";", $treeletters ,";", $country ,"\n";
}
print "All Finished ! \n";
close out;
close out2;


Dakle ja hocu da mi ovaj zapis ima fiksnu duzinu od 30 karaktera/mesta sta vec.
Ali on mi u fajl upise jedan unos za drugim bez dodavanja null/empty znakova cak i ako je prvi record manji od 30 ....

Imao sam i ideju da mu sam rucno dodam onoliko puta koliko mu fali do 30 space na kraj stringa ali to je bezveze.

Kako se radi sa ovim ... syswrite ... ovako pise u knjizi a nece ...

AAAAAAaaaaaaaaaaaaaa :)
 
Odgovor na temu

bzero
dev null
europe

Član broj: 5907
Poruke: 371
195.252.85.*

Jabber: bzero@elitesecurity.org
Sajt: www.google.com/search?q=b..


Profil

icon Re: Syswrite funkcija.02.02.2004. u 22:47 - pre 246 meseci
Ne znam u kojoj si knjizi to procitao, ali tebi uopste ne treba syswrite nego printf():

Code:

printf out ("%30s", $zaupis);


Never trust an operating system you don't have sources for.
 
Odgovor na temu

Free_Sex
Aleksandar
Beograd

Član broj: 9601
Poruke: 616
*.vdial.verat.net



Profil

icon Re: Syswrite funkcija.03.02.2004. u 00:01 - pre 246 meseci
"Perl - detaljni izvornik" ?

Citat:

Funkcija syswrite ima suprotnu ulogu od funkcije sysread. Ona zapisuje blok fiksne velicine skalara u oznaku datoteke :

syswrite filehandle,scalar,length,offset
syswrite filehandle,scalar,length

Ako se navede offset, length bajtova se cita iz argumenta scalar i zapisuje u filehandle. Ako je velicina skalara manja od length, podaci se pune sa null.

open(database,"+<datafile.dat");
..... pronalazenje recorda koji treba da se zameni ....
..... ili ako ga nema pozicioniranje na kraj ....
syswrite(database,$record,80); # Write the record back, repleacing the old version, or adding to the end of file.


A printf kaze da se koristi kad ti treba formatiranje prilikom ispisivanja .... hm ?
 
Odgovor na temu

bzero
dev null
europe

Član broj: 5907
Poruke: 371
*.beotel.net

Jabber: bzero@elitesecurity.org
Sajt: www.google.com/search?q=b..


Profil

icon Re: Syswrite funkcija.03.02.2004. u 02:57 - pre 246 meseci
Citat:

A printf kaze da se koristi kad ti treba formatiranje prilikom ispisivanja .... hm ?

Koliko sam ja skontao tebi i treba formatirani ispis.

Priznajem da tu knjigu nisam citao, ali isto tako nigde nisam ni procitao da syswrite upisuje length bajtova u filehandle (a pogotovo da upisuje null ili slicno ako nema dovoljno bajtova), nego da ce syswrite pokusati da upise length bajtova, a vraca broj bajtova koji je stvarno upisan (ovo je cak uobicajeno za syswrite, pa se zato kao i sysread obicno stvalja u petlju). Ukoliko ti je skalar dugacak 30 bajtova (ili vise) onda ok, inace nisam siguran. Neka me neko ispravi ako gresim.

Ukoliko ti bas treba syswrite, posto izgleda menjas neki record u nekoj bazi, pa verovatno hoces da pises na odredjenu poziciju, mozes formatiras promenjivu $zaupis pre syswrite, sa sprintf ili pack, u zavisnosti kakav ti format treba:

Code:

$zaupis = sprintf("%30s", $zaupis);
... ili ...
$zaupis = pack "a30", $zaupis;
... ili ...
$zaupis = pack "A30", $zaupis;
syswrite (out, $zaupis, 30);

Never trust an operating system you don't have sources for.
 
Odgovor na temu

Free_Sex
Aleksandar
Beograd

Član broj: 9601
Poruke: 616
*.vdial.verat.net



Profil

icon Re: Syswrite funkcija.03.02.2004. u 23:26 - pre 246 meseci
E ma to sam resio :)

Nista prebrojavm koliko mi karaktera fali do kraja (do 25 karaktera) pa onda dodajem " " tj space. Jer nije mi ni bitno sta tu pise. A bitno mi je da bude na kraju ...

Heh sad sam totalno se pogubio kod pretrazivanja. To se valjda zove binarno ili kako vec. Ono gde stalno bode sredinu pa proverava manje vece i shodno tope pomera pointere za kao pocetak i kraj ....
 
Odgovor na temu

bzero
dev null
europe

Član broj: 5907
Poruke: 371
195.252.85.*

Jabber: bzero@elitesecurity.org
Sajt: www.google.com/search?q=b..


Profil

icon Re: Syswrite funkcija.05.02.2004. u 23:24 - pre 245 meseci
Citat:

Nista prebrojavm koliko mi karaktera fali do kraja (do 25 karaktera) pa onda dodajem " " tj space.

Nadam se da to ne prebrojavas i dodajes "rucno", upravo tome sluze sprintf i pack.

Citat:
... kod pretrazivanja. To se valjda zove binarno ...


http://www.cpan.org/modules/by...arch/Search-Binary-0.95.readme
Never trust an operating system you don't have sources for.
 
Odgovor na temu

[es] :: Perl :: Syswrite funkcija.

[ Pregleda: 2964 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.