Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15

Discussione: Non Scrive su File

  1. #11
    ti sei dimenticato di mettere il codice che hai usato per scrivere ciao.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  2. #12
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    46
    Scusa, comunque č solo un 'print' per verificare se quella parte di codice č stata letta ed eseguita (visto che l'esecuzione č condizionata da altre operazioni dello script), eccolo:


    codice:
    	open(LOG, ">../db/stats/all/$filename.data") || die("Cannot open '$filename.data' Line 212\n"); 
    	if(@new_logs) { 
    		print LOG @new_logs || print "errore in scrittura\n"; 
    	}else{ 
    		print LOG "L'array č vuoto\n"; 
    	} 
    	close(LOG) || die("Cannot Close File Line 216\n");
    
    print "ciao\n";
    zamak

  3. #13
    Ciao,

    a questo punto posso consigliarti di inserire un controllo

    print "Siamo al punto xxx: @newLogs\n";

    a schermo dopo TUTTI i passaggi possibili in cui č convolto quell'array. per vedere dove il contenuto sparisce.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  4. #14
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    46
    OK, dopo diversi test ho accertato che l'array non č vuoto al momento in cui deve essere riversato nel file; infatti in un'occasione sono riuscito a fargli scrivere il file; ora mi spiego:

    siamo in un ciclo (riportato di seguito) durante il quale viene chiamata la subroutine incriminata "log" (riportata di seguito);

    SITUAZIONE 1:
    se lascio completare tutti i cicli normalmente dal primo all'ultimo (come dovrebbe essere), ad ogni ciclo l'array viene scritto a video MENTRE il corrispondente file viene riscritto vuoto (cancellando tutto quello che avevo scritto a mano per prova);

    SITUAZIONE 2:
    se INVECE inserisco un " exit; " subito dopo la scrittura e chiusura del file facendo quindi eseguire la subroutine una sola volta, allora l'array viene scritto sia a video che nel file. (questa č l'unica situazione nella quale ottengo quel risultato.)

    Se hai delle idee ti prego di dirmele,
    grazie 1000

    il codice:
    codice:
                  
    {
    	my $count = 0;
    
    	open(YEST, "<db/stats/yesterday.data") or die &error('Cannot open \'yesterday.data\' Line 112');
    	open(YESTBEF, "<db/stats/yesterday_before.data") or die &error('Cannot open \'yesterday_before.data\' Line 114');
    
    	CYCB: while(<YEST>) {
    
    		$count++;
    		if($count == 500) { $count = 0; sleep 2; }
    
    		/(http:\/\/.+)\|(\d+)\n/;
    		my $url = $1;
    		my $logs = $2;
    			while(<YESTBEF>) {	
    			### Confronti
    				if(/$url\|(\d+)\n/) {
    					my $hits = $logs - $1;
    					if($hits == 0) { next CYCB; }
    					&log($url,$hits);
    					next CYCB;
    				}
    			}
    		&log($url,$logs);
    	}
    	close(YEST) or die &error('Cannot close \'yesterday.data\' Line 141');
    	close(YESTBEF) or die &error('Cannot close \'yesterday_before.data\' Line 142');
    }
    
    		           ### SUB LOG
    sub log {
    
    	my $new_ref = 1;
    	my $new_log;
    	my @new_logs;
    	$_[0] =~ m/http:\/\/(?:www\.)?(.)/;
    	my $filename = $1;
    	open(LOG, "<../db/stats/all/$filename.data") or die &error("Cannot open \'$filename.data\' Line 112");
    
    	### - 1 - ### NO NEW MONTH
    	if($new_month != 1) {
    
    		while(<LOG>) {
    			if(/$_[0]\|.+?\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)/) {
    				$new_log = "$_[0]".'|'."$yesterday".'|'."$_[1]".'|'."$1+$_[1]".'|'."$3".'|'."$4+$_[1]".'|'."$5+$_[1]"."\n";
    				push(@new_logs,$new_log);
    				$new_ref = 0;
    			}else{
    				push(@new_logs,$_);
    			}
    		}
    
    		if($new_ref == 1) {
    			$new_log = "$_[0]".'|'."$yesterday".'|'."$_[1]".'|'."$_[1]".'|'."0".'|'."$_[1]".'|'."$_[1]"."\n";
    			push(@new_logs,$new_log);
    		}
    
    	### - 2 - ### NEW MONTH BUT NOT JANUARY
    	}elsif(($new_month == 1)&&($month != 1)) {
    
    		while(<LOG>) {
    			if(/$_[0]\|.+?\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)/) {
    				$new_log = "$_[0]".'|'."$yesterday".'|'."$_[1]".'|'."$_[1]".'|'."$2".'|'."$4+$_[1]".'|'."$5+$_[1]"."\n";
    				push(@new_logs,$new_log);
    				$new_ref = 0;
    			}else{
    				/(.+?\|.+?\|)(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)/;
    				$new_log = "$1"."$2".'|'."$2".'|'."$3".'|'."$5".'|'."$6"."\n";
    				push(@new_logs,$new_log);
    			}
    		}
    
    		if($new_ref == 1) {
    			$new_log = "$_[0]".'|'."$yesterday".'|'."$_[1]".'|'."$_[1]".'|'."0".'|'."$_[1]".'|'."$_[1]"."\n";
    			push(@new_logs,$new_log);
    		}
    
    	### - 3 - ### NEW MONTH and NEW YEAR (JANUARY)
    	}else{
    
    		while(<LOG>) {
    $security++; if($security > 100000) { &error('WHILE LOOP 201'); } ### SECURITY ###
    			if(/$_[0]\|.+?\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)/) {
    				$new_log = "$_[0]".'|'."$yesterday".'|'."$_[1]".'|'."$_[1]".'|'."$2".'|'."$_[1]".'|'."$5+$_[1]"."\n";
    				push(@new_logs,$new_log);
    				$new_ref = 0;
    			}else{
    				/(.+?\|.+?\|)(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)/;
    				$new_log = "$1"."$2".'|'."$2".'|'."$3".'|'."$2".'|'."$6"."\n";
    				push(@new_logs,$new_log);
    			}
    		}
    
    		if($new_ref == 1) {
    			$new_log = "$_[0]".'|'."$yesterday".'|'."$_[1]".'|'."$_[1]".'|'."0".'|'."$_[1]".'|'."$_[1]"."\n";
    			push(@new_logs,$new_log);
    		}
    
    	}
    
    	close(LOG) || die &error('Cannot Close File Line 210');
    
    	open(LOG, ">../db/stats/all/$filename.data") || die("Cannot open '$filename.data' Line 212\n"); 
    		print LOG @new_logs; 
    print "Siamo al punto X @new_logs\n";  #### CONTROLLO #### l'ARRAY VIENE SCRITTO A VIDEO PER OGNI CICLO
    	close(LOG) || die("Cannot Close File Line 216\n");
    
    exit; ### IL CICLO SI FERMA E L'ARRAY č STATO SCRITTO ANCHE NEL FILE, IN MANCANZA DI QUESTO EXIT, AD OGNI CICLO L'ARRAY VIENE SCRITTO A VIDEO MA NON NEL FILE.
    
    }
    zamak

  5. #15
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    46
    Scusa Shishii se ti ho fatto perdere del tempo;

    Il problema non derivava nč da errori nella parte di codice discussa, nč da impostazioni del sistema, tutto era ok;

    i files venivano regolarmente scritti, dopo di che una successiva porzione di codice (errato) eseguiva delle operazioni non volute cancellando puntualmente il contenuto di tutti i files appena scritti.

    Una lezione per quelli che come me farebbero meglio a testare piccole porzioni di codice per volta.

    Grazie comunque a Shishii, ciao.
    zamak

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.