2013-03-27 74 views
0

我有一個用逗號分隔的單個文本文件,其中包含字符串和整數,我嘗試導入到單元格數組中。然後我想根據相同的共振頻率將它導出到多個文件。和文本添加到文件名行使用fscanf在八度/ matlab中讀取文本文件到單元格陣列

這是文本文件導入的樣本:(請注意該文件將遠遠大於這個)

Resonance Freq,number,Filename,time,fs,Split-3675,Session Num 
277.912902832031250,1,p000001,00:00:01,44100,3675,0 
123.912902832031250,2,p000002,00:00:02,44100,3675,2 
277.912902832031250,3,p000003,00:00:03,44100,3675,0 
277.912902832031250,4,p000001,00:00:01,44100,3675,1 
343.912902832031250,5,p000002,00:00:02,44100,3675,0 
277.912902832031250,6,p000003,00:00:03,44100,3675,4 

這是導出的文本文件,我想創建(文本文件1)

277.912902832031250,1,/tmp/p000001.wav,00:00:01,44100,3675,0 
277.912902832031250,3,/tmp/p000003.wav,00:00:03,44100,3675,0 
277.912902832031250,4,/tmp/p000001.wav,00:00:01,44100,3675,1 

這就是我想要創建導出的文本文件(文本文件2)

123.912902832031250,2,/tmp/p000002.wav,00:00:02,44100,3675,2 

這是導出的文本文件,我想創建(文本文件3)

343.912902832031250,5,/tmp/p000002.wavadded ,00:00:02,44100,3675,0 

我遇到的fscanf問題,用逗號分隔的數據

fid = fopen('/tmp/freq_range_color_coded.txt'); 
m_s = fscanf(fid,'%f %f %s %s %f %f %f'); 
fclose(fid); 

,當我訪問一個細胞就像M_S( 1,2)我取回一個字母而不是一個字段。我怎樣才能得到它,所以當我鍵入M_S(1,2)我回來了整場例子

m_s(2,1) should give me 277.912902832031250

由於我使用的是八度和textscan

PS與其不兼容。

+0

「說它是未定義的。」你可以擴展這個嗎? – 2013-03-27 14:49:15

+0

octave 3.4.0中的strread和textscan並不完全兼容其在Matlab 2009b中的實現(以及可能更新的版本)。例如,N = -1選項(重複讀取格式直到字符串結尾)在Octave 3.4.0中未實現。使用N =正整數(N次讀取格式)的值與Matlab中的工作方式相同。我將不得不使用fscanf與分隔符 – 2013-03-27 15:05:46

回答

2

嘗試用textscan導入時跳過標題行:

fid = fopen('/tmp/freq_range_color_coded.txt'); 
m_s = textscan(fid,'%f %f %s %s %f %f %f','delimiter', ',', 'HeaderLines', 1); 
fclose(fid); 
+0

這不起作用回來時出現錯誤:'textscan'未定義在第6行附近。這是textscan代碼行 – 2013-03-27 14:40:37

+0

它看起來像八度文本掃描儀與matlab不完全​​兼容。 octave 3.4.0中的strread和textscan不完全兼容其在Matlab 2009b中的實現(以及可能更新的版本)。例如,N = -1選項(重複讀取格式直到字符串結尾)在Octave 3.4.0中未實現。使用N =正整數(N次讀取格式)的值與Matlab中的工作方式相同。我將不得不使用fscanf,但可以使用分隔符 – 2013-03-27 15:04:51

0

它看起來像八度textscan不與MATLAB完全兼容。 Octave 3.4.0中的strread和textscan並不完全兼容其在Matlab 2009b中的實現(以及可能更新的版本)。例如,N = -1選項(重複讀取格式直到字符串結尾)在Octave 3.4.0中未實現。使用N =正整數(N次讀取格式)的值與Matlab中的工作方式相同。我將不得不使用fscanf,但可以使用分隔符