Я работаю в C на 64-разрядном Ubuntu 14.04.Создайте массив значений из разных текстовых файлов в C
У меня есть несколько TXT-файлов, каждая из которых содержит строки значений с плавающей запятой (1 значение на строку). Линии представляют части сложного образца, и они сохраняются как реальные (a1) \ n imag (a1) \ n real (a2) \ n imag (a2), если это имеет смысл.
В конкретном сценарии имеется 4 текстовых файла, каждый из которых содержит 32768 выборок (таким образом, значения 65536), но мне нужно сделать динамическую версию окончательной версии для размещения до 32 файлов (максимальные образцы на файл не будут превышать 32768) , Я буду читать первые образцы 19800 (в зависимости от других вещей), хотя, поскольку весь сигнал содержится в этих 39600 точках (образцы 19800).
Общая абстракция - представлять файлы/образцы в виде матрицы, где столбцы представляют обратные сигналы и строки, представляют значение каждого сигнала в момент выборки, вплоть до максимальной продолжительности.
Что я пытаюсь сделать, это взять первый образец из каждого возвращаемого сигнала и перенести его в массив значений с плавающей запятой двойной точности, чтобы выполнить некоторую работу, перейдите ко второму отсчету для каждого сигнала (который перезапишут предыдущий массив) и проделать некоторую работу над ними и т. д. до тех пор, пока последняя строка образцов не будет обработана.
Есть ли способ, которым я могу динамически открывать файлы для каждого сигнала (в зависимости от количества импульсов, которые я использую в этом конкретном экземпляре), читать первый образец из каждого файла в буфер и отправлять его на обрабатываться. На следующей итерации указатели файлов будут выровнены по второму образцу, затем они перенесут их в массив и отправят снова, пока не будет достигнуто требуемое количество выборок (19800 в нашем гипотетическом случае).
я могу читать образцы просто отлично от файлов с помощью fscanf:
rx_length = 19800;
int x;
float buf;
double *range_samples = calloc(num_pulses, 2 * sizeof(range_samples));
for (i=0; i < 2 * rx_length; i++){
x = fscanf(pulse_file, "%f", &buf);
*(range_samples) = buf;
}
Все, что должно произойти (в моем уме), что мне нужно, чтобы цикл как образец # и импульс # (в таком порядке) , поэтому, когда законченный одним импульсом, он перейдет к следующему набору отсчетов для следующего импульса и так далее. То, что я не знаю, как это сделать, - это как-то объявить указатели файлов для всех файлов обратного сигнала, когда их число может варьироваться между вызовами (например, все это для 4 импульсов, а при следующем вызове это может быть 16 или 64).
Если есть какие-либо идеи/комментарии/предложения, я бы с удовольствием их услышал.
Спасибо.
Является ли список файлов, известных в начале программы, или это обработка в реальном времени с созданием новых файлов во время работы программы? –
Да, файлы rx_1_out.txt, где 1 - номер импульса. – user2742907