#arrays #matlab #time
#массивы #matlab #время
Вопрос:
Я хочу принять (скажем) 3 элемента времени (например 8:30, 8:20 amp; 8:00) от пользователя и сохраните его в массиве, используя ‘datenum’. Как я могу этого добиться? Пожалуйста, помогите.
Комментарии:
1. У вас возникла проблема, связанная с конкретным кодом?
2. @Idris: Все, что я хочу знать, это то, что, точно так же, как мы принимаем простые целые числа в массив с помощью функции ввода, я хочу принимать элементы времени от пользователя и сохранять их в массиве.
3. @Vakh: Я знаю, что могу хранить элементы времени в переменной, используя ‘datenum’. Но я не знаю, как сохранять элементы времени с помощью пользовательских подсказок.
4. @rayryeng: Я попробую. Надеюсь, это сработает.
5. Я напишу для вас пример. Дайте мне минутку
Ответ №1:
Предполагая, что вы просто хотите запросить у пользователя текущий день и год, и вам нужно только текущее время (часы и минуты — секунды равны 0), вы можете сделать следующее:
dateNumArray = []; %// Store datenums here
%// Enter a blank line to quit this loop
while true
timestr = input('Enter a time: ', 's');
if (isempty(timestr))
break;
end
%// Split the string up at the ':'
%//splitStr = strsplit(timestr, ':'); %// For MATLAB R2012 and up
splitStr = regexp(timestr, ':', 'split');
%// Read in the current date as a vector
%// Format of: [Year, Month, Day, Hour, Minute, Second]
timeRead = clock;
%// Replace hours and minutes with user prompt
%// Zero the seconds
timeRead(4:6) = [str2num(splitStr{1}) str2num(splitStr{2}) 0];
%// Convert to datenum format
dateNumArray = [dateNumArray datenum(timeRead)];
end
Что делает приведенный выше код, так это то, что мы будем продолжать цикл для пользовательского ввода, где ожидается, что время будет в HH:MM
формате. Обратите внимание, что я не выполнял проверку ошибок, поэтому ожидается, что HH
это значение находится между 0-23, а MM
между 0-59. Вы продолжаете вводить числа, вводя ENTERили RETURNдля каждой записи. Он анализирует это как строку, разбивает строку на :
символ и преобразует каждую часть до и после :
символа в число. Затем мы получаем текущее время, когда каждый час и минута были записаны с помощью clock
команды. Это в векторе из 6 элементов, где записываются год, месяц, день, час, минута и секунда. Мы просто заменяем час и минуту на то, что мы читаем от пользователя, и обнуляем секунды. Мы, наконец, используем этот вектор и добавляем его к dateNumArray
переменной, где каждый раз, когда пользователь записывает время, мы будем добавлять datenum
число в этот массив.
Когда вы вызываете это, вот пример сценария:
Enter a time: 8:30
Enter a time: 8:45
Enter a time: 8:00
Enter a time:
Вот пример вывода выше:
format bank %// Show whole numbers and little precision
dateNumArray
format %// Reset format
dateNumArray =
735778.35 735778.36 735778.33
Комментарии:
1. Я получаю эту ошибку. Неопределенная функция ‘strsplit’ для входных аргументов типа ‘char’.
2. Это странно…
strsplit
это встроенная функция MATLAB, но она поддерживается только с 2012 года и далее. Используйте это вместо:regexp(timestr,':','split');
3. да, я получил источник ошибки. В моей версии matlab нет этой функции strsplit.
4. новая ошибка. Индекс превышает размеры матрицы. Ошибка в userInput (строка 16) timeRead(4:6) = [str2num(splitStr{1}) str2num(splitStr{2}) 0];
5. @Necromancer —
regexp
выражение должно работать. Я только что проверил это. Пожалуйста, используйте измененный код, который я написал выше. Я не думаю, что вы используете его правильно.