2016-02-04 27 views
6

Sto cercando di trovare un modo semplice per attivare e disattivare la registrazione in un file di testo come nell'esempio here in Python. La loro soluzione consisteva nell'utilizzare un nome di file valido in cui si desidera la registrazione e utilizzare altrimenti null device'dev/null'. Stanno usando il reindirizzamento ma desidero usare fopen.Esiste un dispositivo nullo in Matlab?

C'è un modo per fare qualcosa come il seguente, che la parola funziona per sistemi Unix o Windows se questo è importante.

nullFID = fopen('/dev/nul', 'w') 

Lo script che sto alterando potrebbe trarre grandi vantaggi con la registrazione dettagliata in alcuni scenari di rottura in cui vogliamo tirare su un buon livello di dettaglio per una manciata di file, ma che sarebbe altrimenti crescere troppo grande per l'elaborazione batch lo script normalmente si indirizza.

risposta

3

Sembra che questo può essere fatto, qualcuno ha postato una risposta su MathWorks utilizzando un termine simile di "file null". Non sono sicuro se questa è una terminologia valida, ma potrebbe essere una riduzione di "null device file".

Il modo per fare riferimento al dispositivo di nulla dipende dal sistema operativo ...

nullFID = fopen('NUL:' ); % Windows 
nullFID = fopen('/dev/null'); % UNIX 

E sembra anche il riferimento varia da Matlab rilascia. Si consideri il seguente script

ver 
nullFID = fopen('NUL:' , 'w') 
fprintf(nullFID , '12345') 
nullFID = fopen('NUL:' ) 
fprintf(nullFID , '12345') 
nullFID = fopen('NUL' , 'w') 
nullFID = fopen('NUL') 

E il seguente output generato da due versioni di Matlab ...

R2011b

>> ver 
------------------------------------------------------------------------------------- 
MATLAB Version 7.13.0.564 (R2011b) 
MATLAB License Number: xxxx 
Operating System: Microsoft Windows 7 Version 6.1 (Build 7601: Service Pack 1) 
Java VM Version: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode 
------------------------------------------------------------------------------------- 
MATLAB            Version 7.13  (R2011b) 

>> nullFID = fopen('NUL:' , 'w') 
nullFID = 119 

>> fprintf(nullFID , '12345') 
ans = 5 

>> nullFID = fopen('NUL:') 
nullFID = 120 

>> fprintf(nullFID , '12345') 
ans = 0 

>> nullFID = fopen('NUL' , 'w') 
Warning: You have chosen a reserved DOS device name for your filename. 
Please choose another valid filename 
nullFID = -1 

>> nullFID = fopen('NUL') 
nullFID = -1 

R2015a

>> ver 
---------------------------------------------------------------------------------------------------- 
MATLAB Version: 8.5.0.197613 (R2015a) 
MATLAB License Number: 1093113 
Operating System: Microsoft Windows 7 Professional Version 6.1 (Build 7601: Service Pack 1) 
Java Version: Java 1.7.0_60-b19 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode 
---------------------------------------------------------------------------------------------------- 
MATLAB            Version 8.5  (R2015a) 

>> nullFID = fopen('NUL:' , 'w') 
nullFID = -1 

>> fprintf(nullFID , '12345') 
Error using fprintf 
Invalid file identifier. Use fopen to generate a valid file identifier. 

>> nullFID = fopen('NUL:') 
nullFID = 8 

>> fprintf(nullFID , '12345') 
ans = 0 

>> nullFID = fopen('NUL' , 'w') 
Warning: You have chosen a reserved DOS device name for your filename. 
Please choose another valid filename. 
nullFID = -1 

>> nullFID = fopen('NUL') 
nullFID = -1 
+1

Perché 'w 'in un caso e non nell'altro er? Dovresti anche menzionare il primo per Windows, il secondo per Linux. – Daniel

+0

@Daniel, espanderò la risposta e includerò alcuni scenari di lavoro, non sono sicuro del ruolo di "w", in realtà ho copiato il codice da più punti e li ho confusi lungo il percorso. Non sembra necessario ma sembra che cambi l'ID del file in un modo misterioso. – jxramos

+0

''w'' apre il file per la scrittura e scarta i contenuti esistenti (al contrario di'' a'', che si aggiunge). Dubito che scartare il contenuto esistente di un dispositivo nullo abbia senso, quindi questo potrebbe essere il problema. –