Подтвердить что ты не робот

Чтение текстового файла в MATLAB по строкам

У меня есть файл CSV, я хочу прочитать этот файл и сделать некоторые предварительные вычисления в каждой строке, чтобы увидеть, например, что эта строка полезна для меня или нет, и если да, я сохраняю ее в новом CSV файле. может ли кто-нибудь дать мне пример? более подробно, как мои данные выглядят следующим образом: (строка, float, float) числа являются координатами.

ABC,51.9358183333333,4.183255
ABC,51.9353866666667,4.1841
ABC,51.9351716666667,4.184565
ABC,51.9343083333333,4.186425
ABC,51.9343083333333,4.186425
ABC,51.9340916666667,4.18688333333333

В основном я хочу сохранить строки, которые имеют для расстояний более 50 или 50 в новом файле. Строковое поле также должно быть скопировано. спасибо

4b9b3361

Ответ 1

Фактически вы можете использовать xlsread, чтобы выполнить это. После того, как вы сначала разместили свои образцы данных в файле 'input_file.csv', вот пример того, как вы можете получить числовые значения, текстовые значения и необработанные данные в файле из трех выходов из xlsread:

>> [numData,textData,rawData] = xlsread('input_file.csv')

numData =     % An array of the numeric values from the file

   51.9358    4.1833
   51.9354    4.1841
   51.9352    4.1846
   51.9343    4.1864
   51.9343    4.1864
   51.9341    4.1869


textData =    % A cell array of strings for the text values from the file

    'ABC'
    'ABC'
    'ABC'
    'ABC'
    'ABC'
    'ABC'


rawData =     % All the data from the file (numeric and text) in a cell array

    'ABC'    [51.9358]    [4.1833]
    'ABC'    [51.9354]    [4.1841]
    'ABC'    [51.9352]    [4.1846]
    'ABC'    [51.9343]    [4.1864]
    'ABC'    [51.9343]    [4.1864]
    'ABC'    [51.9341]    [4.1869]

Затем вы можете выполнить любую обработку, которая вам нужна для числовых данных, а затем повторно сохранить подмножество строк данных в новый файл, используя xlswrite. Вот пример:

index = sqrt(sum(numData.^2,2)) >= 50;  % Find the rows where the point is
                                        %   at a distance of 50 or greater
                                        %   from the origin
xlswrite('output_file.csv',rawData(index,:));  % Write those rows to a new file

Ответ 2

Если вы действительно хотите обработать файл по строкам, решение может заключаться в использовании fgetl:

  • Откройте файл данных с помощью fopen
  • Прочитайте следующую строку в массиве символов, используя fgetl
  • Извлеките нужные данные, используя sscanf в массиве символов, который вы только что прочитали.
  • Выполните любой соответствующий тест
  • Вывести то, что хотите, в другой файл
  • Вернитесь к пункту 2, если вы еще не достигли конца вашего файла.

В отличие от предыдущего ответа, это не очень похоже на стиль Matlab, но он может быть более эффективным для очень больших файлов.

Надеюсь, это поможет.

Ответ 3

Вы не можете читать текстовые строки с помощью csvread. Вот еще одно решение:

fid1 = fopen('test.csv','r'); %# open csv file for reading
fid2 = fopen('new.csv','w'); %# open new csv file
while ~feof(fid1)
    line = fgets(fid1); %# read line by line
    A = sscanf(line,'%*[^,],%f,%f'); %# sscanf can read only numeric data :(
    if A(2)<4.185 %# test the values
        fprintf(fid2,'%s',line); %# write the line to the new file
    end
end
fclose(fid1);
fclose(fid2);

Ответ 4

Просто прочитайте его в MATLAB в одном блоке

fid = fopen('file.csv');
data=textscan(fid,'%s %f %f','delimiter',',');
fclose(fid);

Затем вы можете обработать его с помощью логической адресации

ind50 = data{2}>=50 ;

ind50 - это индекс строк, где столбец 2 больше 50. Таким образом,

data{1}(ind50)

отобразит все строки для интересующих строк. Затем просто используйте fprintf, чтобы записать ваши данные в новый файл

Ответ 5

вот документ, чтобы прочитать csv: http://www.mathworks.com/access/helpdesk/help/techdoc/ref/csvread.html и написать: http://www.mathworks.com/access/helpdesk/help/techdoc/ref/csvwrite.html

ИЗМЕНИТЬ

Пример, который работает:

file.csv:

1,50,4.1
2,49,4.2
3,30,4.1
4,71,4.9
5,51,4.5
6,61,4.1

код:

File = csvread('file.csv')
[m,n] = size(File)
index=1
temp=0
for i = 1:m
    if (File(i,2)>=50)
        temp = temp + 1
    end
end
Matrix = zeros(temp, 3)

for j = 1:m
    if (File(j,2)>=50)
        Matrix(index,1) = File(j,1)
        Matrix(index,2) = File(j,2)
        Matrix(index,3) = File(j,3)
        index = index + 1
    end
end
csvwrite('outputFile.csv',Matrix)

и результат выходного файла:

1,50,4.1
4,71,4.9
5,51,4.5
6,61,4.1

Это не лучшее решение, но оно работает! Мы можем прочитать CSV файл, контролировать расстояние каждой строки и сохранять его в новом файле.

Надеюсь, это поможет!