2017-08-02 323 views
0

我目前正在研究需要來自專家的幫助。我是Matlab新手。這是要求。我有一個大的數據文件(該文件可以是任何最適合需要的格式,比如csv或txt或xlsx文件,並且具有混合內容),我必須從中提取數據並將其寫入文本文件特定的字符串或特定的行表示第15行。我必須在for循環中運行它,以便將從數據文件中提取的數據寫入到已有的多個文本文件中。我開發了一個代碼,現在提取數據並將其寫入文本文件,但它從一開始就替換了文本的內容。我想要在指定的位置插入輸出(輸出有多行)。這是當前可用的代碼。使用Matlab提取數據並將數據寫入特定行的代碼

fidr = fopen('file1.csv','r') ; 

% open file for writing 

fidw = fopen('file2.txt','w') ; 
% while end of file has not been reached 

while (~feof(fidr)) 

     % read line from reading file 

     str = fgets(fidr) ; 

% % %write line to writing file 

     fwrite(fidw,str) ; 
end 
+0

不是很熟悉這個主題,但從我能找到的你可能想用'fopen('file2.csv','a')'追加數據。第五編輯魅力? – Durkee

回答

0

如果使用Matlab的分析bigdata套的CSV文件,我建議你使用DataStore,也學習如何與table小號

不幸的是,替你的情況下datastore僅供閱讀(據因爲我知道),但你可以這樣進行,讓我們假設,我們有這個csv

Batting.csv:

ds = tabularTextDatastore('Batting.csv'); 

>> ds.ReadSize = 1 

ds = 

    TabularTextDatastore with properties: 

         Files: { 
          '/Users/toni/Documents/MATLAB/Batting.csv' 
          } 
       FileEncoding: 'UTF-8' 
      ReadVariableNames: true 
       VariableNames: {'playerID', 'yearID', 'stint' ... and 19 more} 

    Text Format Properties: 
      NumHeaderLines: 0 
        Delimiter: ',' 
       RowDelimiter: '\r\n' 
      TreatAsMissing: '' 
       MissingValue: NaN 

    Advanced Text Format Properties: 
      TextscanFormats: {'%q', '%f', '%f' ... and 19 more} 
        TextType: 'char' 
     ExponentCharacters: 'eEdD' 
       CommentStyle: '' 
       Whitespace: ' \b\t' 
    MultipleDelimitersAsOne: false 

    Properties that control the table returned by preview, read, readall: 
     SelectedVariableNames: {'playerID', 'yearID', 'stint' ... and 19 more} 
      SelectedFormats: {'%q', '%f', '%f' ... and 19 more} 
        ReadSize: 1 rows 

,你可以預覽內容:

>> preview(ds) 

ans = 

    playerID  yearID stint teamID lgID G  AB  R  H  x2B x3B HR RBI SB CS BB SO IBB HBP SH  SF  GIDP 
    ___________ ______ _____ ______ ____ __ ___ __ __ ___ ___ __ ___ __ __ __ __ ___ ___ ___ ___ ____ 

    'abercda01' 1871  1  'TRO'  'NA'  1  4  0  0  0  0  0  0  0 0  0 0  NaN NaN NaN NaN NaN 
    'addybo01'  1871  1  'RC1'  'NA' 25 118 30 32  6  0  0  13  8 1  4 0  NaN NaN NaN NaN NaN 
    'allisar01' 1871  1  'CL1'  'NA' 29 137 28 40  4  5  0  19  3 1  2 5  NaN NaN NaN NaN NaN 
    'allisdo01' 1871  1  'WS3'  'NA' 27 133 28 44 10  2  2  27  1 1  0 2  NaN NaN NaN NaN NaN 
    'ansonca01' 1871  1  'RC1'  'NA' 25 120 29 39 11  3  0  16  6 2  2 1  NaN NaN NaN NaN NaN 
    'armstbo01' 1871  1  'FW1'  'NA' 12  49  9 11  2  1  0  5  0 1  0 1  NaN NaN NaN NaN NaN 
    'barkeal01' 1871  1  'RC1'  'NA'  1  4  0  1  0  0  0  2  0 0  1 0  NaN NaN NaN NaN NaN 
    'barnero01' 1871  1  'BS1'  'NA' 31 157 66 63 10  9  0  34  11 

與數據表工作:

>> reset(ds) 
>> while hasdata(ds) 
T = read(ds); 
disp(T(strcmp(T.teamID,'RC1'),:)); 
end 
    playerID  yearID stint teamID lgID G  AB  R  H  x2B x3B HR RBI SB CS BB SO IBB HBP SH  SF  GIDP 
    ___________ ______ _____ ______ ____ __ ___ __ __ ___ ___ __ ___ __ __ __ __ ___ ___ ___ ___ ____ 

    'addybo01'  1871  1  'RC1'  'NA' 25 118 30 32  6  0  0  13  8 1  4  0  NaN NaN NaN NaN NaN 
    'ansonca01' 1871  1  'RC1'  'NA' 25 120 29 39 11  3  0  16  6 2  2  1  NaN NaN NaN NaN NaN 
    'barkeal01' 1871  1  'RC1'  'NA'  1  4  0  1  0  0  0  2  0 0  1  0  NaN NaN NaN NaN NaN 
    'birdge01'  1871  1  'RC1'  'NA' 25 106 19 28  2  5  0  13  1 0  3  2  NaN NaN NaN NaN NaN 
    'fishech01' 1871  1  'RC1'  'NA' 25 123 24 28  3  3  1  22  1 2  3  1  NaN NaN NaN NaN NaN 
    'fulmech01' 1871  1  'RC1'  'NA' 16  63 11 17  1  3  0  3  0 0  5  1  NaN NaN NaN NaN NaN 
    'hamra01'  1871  1  'RC1'  'NA' 25 113 25 28  4  0  0  12  6 2  1  7  NaN NaN NaN NaN NaN 
    'hastisc01' 1871  1  'RC1'  'NA' 25 118 27 30  6  4  0  20  11 2  2  4  NaN NaN NaN NaN NaN 
    'mackde01'  1871  1  'RC1'  'NA' 25 122 34 30  7  1  0  17  12 0  8  7  NaN NaN NaN NaN NaN 
    'sagerpo01' 1871  1  'RC1'  'NA'  8  39  9 11  0  0  0  5  5 1  2  2  NaN NaN NaN NaN NaN 
    'stirega01' 1871  1  'RC1'  'NA' 25 110 23 30  4  6  2  24  3 0  7  5  NaN NaN NaN NaN NaN 

,並讓你的工作的最後一個骯髒的方式:

>> reset(ds) 
>> T = readall(ds); 
>> writetable(T(strcmp(T.teamID,'RC1'),:),'mydata.txt'); 

得到一個名爲MYDATA文件.txt

包含此內容:

playerID,yearID,stint,teamID,lgID,G,AB,R,H,x2B,x3B,HR,RBI,SB,CS,BB,SO,IBB,HBP,SH,SF,GIDP 
addybo01,1871,1,RC1,NA,25,118,30,32,6,0,0,13,8,1,4,0,NaN,NaN,NaN,NaN,NaN 
ansonca01,1871,1,RC1,NA,25,120,29,39,11,3,0,16,6,2,2,1,NaN,NaN,NaN,NaN,NaN 
barkeal01,1871,1,RC1,NA,1,4,0,1,0,0,0,2,0,0,1,0,NaN,NaN,NaN,NaN,NaN 
birdge01,1871,1,RC1,NA,25,106,19,28,2,5,0,13,1,0,3,2,NaN,NaN,NaN,NaN,NaN 
fishech01,1871,1,RC1,NA,25,123,24,28,3,3,1,22,1,2,3,1,NaN,NaN,NaN,NaN,NaN 
fulmech01,1871,1,RC1,NA,16,63,11,17,1,3,0,3,0,0,5,1,NaN,NaN,NaN,NaN,NaN 
hamra01,1871,1,RC1,NA,25,113,25,28,4,0,0,12,6,2,1,7,NaN,NaN,NaN,NaN,NaN 
hastisc01,1871,1,RC1,NA,25,118,27,30,6,4,0,20,11,2,2,4,NaN,NaN,NaN,NaN,NaN 
mackde01,1871,1,RC1,NA,25,122,34,30,7,1,0,17,12,0,8,7,NaN,NaN,NaN,NaN,NaN 
sagerpo01,1871,1,RC1,NA,8,39,9,11,0,0,0,5,5,1,2,2,NaN,NaN,NaN,NaN,NaN 
stirega01,1871,1,RC1,NA,25,110,23,30,4,6,2,24,3,0,7,5,NaN,NaN,NaN,NaN,NaN 
+0

謝謝你的代碼。我將查看數據存儲並嘗試您的代碼。但仍然沒有辦法將數據存儲到文本文件中的特定位置(如您所示的mydata.txt文件)。我提供的上述代碼很好地將數據寫入文本文件。但是如何將這些數據寫入特定的行。任何幫助表示讚賞。再一次感謝你。 –