Код для извлечения и записи данных в определенную строку с помощью Matlab

В настоящее время я работаю над чем-то, что требует помощи экспертов. Я новичок в Matlab. Вот требование. У меня есть большой файл данных (файл может быть любого формата, который лучше всего соответствует потребностям, скажем, файлов csv, txt или xlsx и имеет смешанный контент), из которого я должен извлечь данные и записать их в текстовый файл после конкретная строка или конкретная строка говорят, что строка № 15. Я должен запустить это в цикле for, чтобы данные, извлеченные из файла данных, были записаны в несколько текстовых файлов, которые у меня уже есть. Я разработал код, который теперь извлекает данные и записывает их в текстовый файл, но заменяет содержимое текста с самого начала. Я хочу вставить вывод (вывод состоит из нескольких строк) в указанном месте. Вот код, который сейчас доступен.

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

person Pradeep Augustine    schedule 02.08.2017    source источник
comment
Не очень знаком с этой темой, но из того, что я могу найти, вы можете использовать fopen('file2.csv','a') для добавления данных. 5-й правит шарм?   -  person Durkee    schedule 02.08.2017


Ответы (1)


Если вы используете Matlab для анализа наборов больших данных CSV-файлов, я рекомендую вам использовать DataStore, а также узнайте, как работать с таблица s

К сожалению, в вашем случае 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
person anquegi    schedule 02.08.2017
comment
Спасибо за код. Я посмотрю хранилище данных и попробую ваш код. Но по-прежнему нет способа сохранить данные в определенном месте в текстовом файле (файл mydata.txt, как показано вами). Приведенный мной выше код отлично работает для записи данных в текстовый файл. Но как записать эти данные в конкретную строку. Любая помощь приветствуется. Еще раз, спасибо. - person Pradeep Augustine; 02.08.2017