Работа с CSV-файлами в Scilab

Файлы формата CSV широко используются при работе с базами данных (например, MySQL позволяет импорт и экспорт записей в этом формате). Как правило, файл в таком формате содержит в себе множество значений, например, это могут быть результаты какого-либо эксперимента.

Большинство функций Scilab работает с переменными и массивами. Поэтому, нам надо загрузить данные из CSV-файла в массивы и переменные Scilab. В Scilab нет функций для работы непосредственно с файлами CSV, однако, в нём достаточно функций для удобной работы с любыми файлами, и поэтому можно без труда написать простенькую функцию загрузки значений из файла CSV.

Пусть у нас CSV-файл, из которого нам надо загрузить данные, имеет следующую структуру:

1230521285 1285
1230606038 1289
1230629291 1290
1230692491 1291
1230778569 1293

Каждая строка - это пара чисел: первое число есть время в формате UNIX, а второе - значение некоторой переменной, измеренное в этот промежуток времени. Числа разделены пробелом. Необходимо считать эти числа в массивы x(i) и y(i) соответственно.

Вот код функции, реализующей это:

function [x, y] = readfile(filename)
  [fd,err] = mopen(filename,'r');
  i = 1;
  while ~meof(fd)
    x(i) = mfscanf(fd, '%lg');
    y(i) = mfscanf(fd, '%lg');
    i = i + 1;
  end;
  mclose(fd);
  x = x';
  y = y';
endfunction

Если у вас есть какие-то дополнения или комментарии, мы будем рады их услышать - комментируйте данную статью!

Комментарии

Re: Работа с CSV-файлами в Scilab

Спасибо, очень полезная функция, еще б расширить, для произвольного колличества столбцов;) а вообще, просто и наглядно.

Белее простой способ загрузки данных из файлов

Здравствуйте! Несоменно, предлженный Вами способ чтения данных из csv-файла полезный, а в некоторых ситуациях, единственно возможный. Но, если у файла структура простая (как раз такая, как у вас), то есть более простой способ чтения данных из этого файла – функция read. Пусть, например, нужно построить графики составляющих профиля скорости U потока. Составляющих три - Ux, Uy, Uz. OpenFOAM создаёт файл вида:

0.000408163 0.00972335 -0.00883578 -2.14563e-05
0.000816327 0.0194467 -0.0176716 -4.29125e-05
0.00122449 0.0291701 -0.0265073 -4.07586e-05
0.00163265 0.0388934 -0.0353431 -1.92873e-05
0.00204082 0.0506507 -0.0438358 -4.71581e-05
...

Значения 1 столбца будут будут использованы в качестве значений по оси абсцисс. Второй, третий и четвёртый столбцы – значения составляющих скорости по x, y и z соответственно. Итак, читаем данные и строим графики

U=read('datafile.xy', -1, 4); // читаем файл - 4 столбца и все строки (см. help)
x=U(:,1); // вектор значений для оси абсцисс
Ux=U(:,2); // вектор значений для оси ординат 1-го графика
Uy=U(:,3); // вектор значений для оси ординат 2-го графика
Uz=U(:,4); // вектор значений для оси ординат 3-го графика
plot(x,Ux); // строится 1-й график
plot(x,Uy); // строится 2-й график
plot(x,Uz); // строится 3-й график

Ооо, спасибо! :) Ваш пример

Ооо, спасибо! :)

Ваш пример более компактный, конечно. Однако передо мной, в свое время, стояла задача сделать более-менее универсальную функцию.

Но все равно, ваше решение - в копилку!

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <table> <thead> <tbody> <tr> <th> <td> <h1> <h2> <h3> <h4> <h5> <h6> <a> <img> <div> <span> <p> <em> <i> <strong> <b> <strike> <s> <u> <sup> <sub> <cite> <blockquote> <code> <pre> <ul> <ol> <li> <dl> <dt> <dd> <br> <hr>
  • Строки и параграфы переносятся автоматически.
  • Use [fn]...[/fn] (or <fn>...</fn>) to insert automatically numbered footnotes.
  • You can enable syntax highlighting of source code with the following tags: <geshi>. The supported tag styles are: <foo>, [foo]. PHP source code can also be enclosed in <?php ... ?> or <% ... %>.
  • Images can be added to this post.

Подробнее о форматировании

КАПЧА
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.
Синдикация материалов