Warning: file_put_contents(/datas/wwwroot/jiajiahui/core/caches/caches_template/2/default/show.php): failed to open stream: Permission denied in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 55

Warning: chmod(): Operation not permitted in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 56
使用Matlab提取数据并将数据写入特定行的代码 - 源码之家

使用Matlab提取数据并将数据写入特定行的代码

问题描述:

我目前正在研究需要来自专家的帮助。我是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

如果使用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文件)。我提供的上述代码很好地将数据写入文本文件。但是如何将这些数据写入特定的行。任何帮助表示赞赏。再一次感谢你。 –