2016-06-19 21 views
0

ich fread bin mit Datei in meinem C Disk zu lesen, wird der Inhalt von Dateien sind:fread Rückkehr falsche Daten

ssa.txt: 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 

ssb.txt: 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 

Aber fread liest

Spalten 1 bis 25

48 48 48 48 48 49 49 49 49 48 48 48 48 48 48 48 49 49 49 49 49 48 48 48 48 

Spalten 26 bis 31

48 48 48 48 48 48 

Mein Code:

n = 31; 
fid =fopen('ssa.txt'); 
s1 = fread(fid,[1,n]); 
fclose(fid); 

fid2 =fopen('ssb.txt'); 
s2 = fread(fid2,[1,n]); 
fclose(fid2); 

Kann mir jemand erklären, was falsch ist?

+4

48 und 49 klingen wie die ASCII-Darstellung von 0 und 1, als Zeichen. Also "0" und "1". Als [die Dokumente] (http://www.mathworks.com/help/matlab/ref/fread.html) sagen, "fread" liest * binary * Dateien, aber Sie haben eine Textdatei. Verwenden Sie stattdessen etwas wie ['textscan'] (http://www.mathworks.com/help/matlab/ref/textscan.html) (oder' fgetl' plus 'num2str2' usw.). –

Antwort

0

Warum genau fread tut, dass ich nicht sicher bin, ich denke, es hat etwas mit diesen fread liest Binärdateien und diese Zahlen sind die ASCII-Darstellung von 0 und 1 zu tun. Die Arbeit rund um würde ich vorschlagen wird dlmread für Zahlen mit nur:

dlmread('SSA.txt') 
ans = 
    Columns 1 through 16 
    0  0  0  0  0  1  1  1  1  0  0  0  0  0  0  0 
    Columns 17 through 31 
    1  1  1  1  1  0  0  0  0  0  0  0  0  0  0 
+0

Die eigentliche Frage ist, warum die Leerzeichen zwischen den Zahlen nicht als Zeichen gelesen werden. –

+3

@AndrasDeak Wenn Sie * genau * diese Datei verwenden, erhalten Sie die OP-Serie interleaved mit '32', dem ASCII-Wert für Leerraum. Ich denke, ihre Dateien enthalten keinen Leerraum. – Adriaan