2016-05-27 5 views
0

I wie unten eine Matrix haben:einen Raum/Tab separaten Feld in einem Säulenelement einfügen MATLAB

615319419701102123000000 000000 000000 000000 000000 000000 000000 000003 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 

Die Matrix hat 24-Säule. In der ersten Spalte steht die 7-stellige (dh 6153194) Statistik-ID, die nächsten 4-stelligen Jahre (1970), der nächste 2-stellige Monat (11, November), die nächste 2-stellige Zahl steht für den Monatstag (zum Beispiel in der 1st Spalte 02 bedeutet 2. Tag), dann ist 123 das Flag, das seine Zeitreihe der Niederschlagsrate und die letzte sechsstellige Zahl angibt (dh 000000 ist die Niederschlagsmenge). Die letzte 23 Spalte zeigt stündliche Niederschlagsdaten in mm an.

Ich möchte an die Station-ID in den Bereich der ersten Säule zu trennen, Jahr, Monat, Tag und Wert in das Programm zu füttern, das so etwas wie:

6153194 1970 11 02 123 000000 000000 000000 000000 000000 000000 000000 000003 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 

Und schließlich ebenfalls eine Zeitreihe:

Mein Hauptanliegen ist, wie Felder mit Tab/Space von der ersten Spalte getrennt werden und wie man eine Zeitreihe daraus baut? Irgendwelche Hilfe/Vorschläge zu diesem

Antwort

0

Der folgende Code sollte die Ausgabe produzieren, die ich glaube, dass Sie produzieren möchten. Ich bin mir jedoch nicht ganz sicher, ob ich Ihre Frage vollständig verstanden habe. Bitte lassen Sie mich wissen, wenn Sie die Daten in einem anderen Format benötigen, und ich werde den Code ändern.

Nach dem Ausführen des Codes enthält charMatrix die Daten als ein Zeichenarray mit der ersten Spalte, die wie im Beispiel in Ihrer Frage gezeigt begrenzt ist. numMat ist ein Array, das die numerischen Daten enthält, die dem charMatrix entsprechen.

%% Subdivision of the first column. 

% Read the data. 
fid = fopen('file.txt'); 
charCell = textscan(fid, '%s', 'delimiter', '\n'); 
charCell = charCell{1}; 

% Split by whitespace. 
charCell = cellfun(@strsplit, charCell, 'UniformOutput', false); 

% Split the first column. 
charCell = cellfun(... 
    @(charMatrixRow) { ... 
    charMatrixRow{1}(1 : 7) ... 
    charMatrixRow{1}(8 : 11) ... 
    charMatrixRow{1}(12 : 13) ... 
    charMatrixRow{1}(14 : 15) ... 
    charMatrixRow{1}(16 : 18) ... 
    charMatrixRow{2 : end} ... 
    }, ... 
    charCell, ... 
    'UniformOutput', false ... 
    ); 

% Join individual columns with a whitespace delimiter. 
charMatrix = cellfun(... 
    @strjoin, charCell, 'UniformOutput', false ... 
    ); 

% If you would like to get the values in the form of a character array: 
charMatrix = cell2mat(charMatrix); 

%% Numeric representation of the columns. 
% If you would like to get the individual columns in the form of numeric 
% arrays, use the code below. 

charCell = vertcat(charCell{:}); 

numMat = cell2mat(cellfun(@str2num, charCell, 'UniformOutput', false)); 
+0

Hallo, Danke für Ihre Hilfe! Die Daten sind im numerischen Format und nicht in Form eines Zeichenarrays. Ich kann es direkt mit dem Befehl importdata von einem Text/Notizblock öffnen. In diesem Fall bekomme ich Fehler in Foll. Zeile: charCell = cellfun (@strsplit, charCell, 'UniformOutput', false); – Poulomi

+0

Vielen Dank für Ihren Kommentar. Ich denke, dass Sie irgendwie die Daten in das Zeichenarray des Formulars konvertieren müssen, das in 'charMatrix' angegeben ist, weil sonst Probleme mit der Genauigkeit für die Speicherung der ersten Spalte des ursprünglichen Datensatzes auftreten. Die maximale von MATLAB unterstützte Ganzzahl ist 18446744073709551615 (uint64). Wenn Sie Ihre Datendatei hochladen können, kann ich eine vollständige Lösung bereitstellen. – user1391279

+0

Hallo, ich habe versucht, die Daten mit Text-Scan zu lesen: X = textscan (Datei-ID, '% s', 24, 'Delimiter', '\ n'); Es gibt 24 Spalten, also habe ich hier 24 gesetzt. Dann habe ich versucht, das Zellenarray mit dem Befehl char in ein Zeichenarray umzuwandeln. Ich habe einen Fehler erhalten "Zellenelemente müssen Zeichenfelder sein". Irgendwelche Vorschläge wie soll ich vorgehen? – Poulomi

Verwandte Themen