Avatar billede sharpe Nybegynder
28. december 2008 - 14:18 Der er 6 kommentarer

Løb gennem en fil x antal tegn ad gangen

Hej,

Jeg sidder med en problemstilling, som er nok nemmest at forklare med et eksempel.

Jeg har en fil, der indeholder følgende

aabbccddeeffgg

og jeg vil have følgende som output:

aa
ab
bb
bc
cc
cd
dd
de
..
..

Jeg har forsøgt med følgende:

..
while (($n = read(F_IN, $data, 2, $offset)) != 0) {
print "$data\n";
$offset += 1;
}
..

Men outputtet ser helt forkert ud:

aa
abb
abcc
abcdd
abcdee
abcdeff
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
abcdefghijk

Er der nogen, der kan hjælp?

Pft.
Avatar billede erikjacobsen Ekspert
28. december 2008 - 14:26 #1
Skulle være nok at

while (($n = read(F_IN, $data,2)) != 0) {
  print "$data\n";
}
Avatar billede sharpe Nybegynder
28. december 2008 - 14:33 #2
Tak for dit svar :)

Programmet skal læse x tegn ad gangen men kun hoppe 1 tegn frem ikke 2:

aa
ab
bb
bc
..
Avatar billede erikjacobsen Ekspert
28. december 2008 - 14:37 #3
Ok, det fik jeg ikke læst. Vi kan jo løse det ved at gemme tegnet i en variabel i Perl, men ellers kan du spole een tilbage på filen. Fx:

$offset=0;
while (($n = read(F_IN, $data,2)) != 0) {
  print "$data\n";
  $offset++;
  seek(F_IN,$offset,0);
}
Avatar billede sharpe Nybegynder
28. december 2008 - 14:42 #4
Hvis vi antager, at programmet skal gennemløbe en fil med 6 milliard tegn, vil det ikke være tungt, at spoole hele tiden tilbage?

I mit eksempel, er det som om $data ikke tømmes mellem iterationer.
Avatar billede erikjacobsen Ekspert
28. december 2008 - 14:44 #5
Den "spoler" kun tilbage i en buffer. Om det er for tungt kan du vel se ved at prøve.
Avatar billede sharpe Nybegynder
28. december 2008 - 14:46 #6
Super Erik. Jeg tester nu her og vender tilbage med en status.
mange tak for din hjælp :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester