#c 11 #for-loop
#c 11 #for-цикл
Вопрос:
Я пытаюсь записать текущее время и некоторые данные (расстояние и амплитуду) от датчика в текстовый файл. Количество данных очень велико (датчик вращается с частотой 50 Гц, а количество данных может составлять 5000 за сканирование). Теперь я хочу сначала записать текущее время, а затем все данные в одной строке, например,
11:23:17 (time)
distance1 amplitude1; distance2 amplitude2; ... distance5000 amplitude5000;
11:23:18
distance1 amplitude1; distance2 amplitude2; ... distance5000 amplitude5000;
.
.
.
11:27:00
distance1 amplitude1; distance2 amplitude2; ... distance5000 amplitude5000;
«Итак, мой вопрос в том, как это получить?»
Я могу записать только расстояние и данные, как показано ниже
for(int t=0; t<distances.size(); t )
{
pfsave << distances[t] <<"t" << amplitudes[t]<<";";
}
pfsave<<endl;
Примечание: тип данных расстояний и амплитуд
vector<uint32_t> distacnes;
vector<uint32_t> amplitudes;
Комментарии:
1. Кажется, вы забыли включить вопрос в свой вопрос.
2. Я предлагаю не писать
endl
, когда вы хотите разместить все данные в одной строке.
Ответ №1:
Вы можете записать текущее время следующим образом, перед началом вашего цикла for:
auto t = std::time(nullptr);
auto tm = *std::localtime(amp;t);
pfsave << std::put_time(amp;tm, "%H:%M:%S") << std::endl;
Затем ваш цикл for без endl
, чтобы написать одну строку:
for(int t=0; t<distances.size(); t )
{
pfsave << distances[t] <<"t" << amplitudes[t]<<";";
}
И, наконец, добавьте endl
, чтобы закончить строку:
pfsave << endl;
РЕДАКТИРОВАТЬ: после вашего комментария
bool canContinue = true; // Condition used to stop the loop when needded
while(canContinue)
{
// Read data from your scanning device
distances = ... ;
amplitudes = ... ;
// Write output file
auto t = std::time(nullptr);
auto tm = *std::localtime(amp;t);
pfsave << std::put_time(amp;tm, "%H:%M:%S") << std::endl;
for(int t=0; t<distances.size(); t )
pfsave << distances[t] <<"t" << amplitudes[t]<<";";
pfsave << endl;
// Update of canContinue
canContinue = ... ;
}
Комментарии:
1. Дело в том, что если я сделаю это, он запишет только одну строку (все данные только из одного сканирования), а затем остановится. Я хочу записывать данные непрерывно.
2. Затем вам нужно поместить все это в
while
for
цикл или, захватываяdistances
иamplitudes
на каждой итерации.3. Я попробовал цикл while, и мои программы пошли по бесконечному циклу.
4. Если я попробую
for
цикл, он будет записывать одни и те же данные снова и снова.5. О бесконечном цикле: вам нужно определить условие остановки (возможно, сигнал от вашего сканирующего устройства или кнопка в графическом интерфейсе, это зависит от вас). Что касается записи одних и тех же данных, вам необходимо обновить свои массивы с устройства сканирования. Вам следует посмотреть примеры от его производителя или из SDK, если вы его используете.