Строковые операции печати случайного символа на последовательном мониторе
Я хочу извлечь имя файла
MyFile.txt из пути, который хранится в строке "C:\\MyDirectory\\MyFile.txt";
Я нашел простой код на языке си, который выполняет эту работу.
string filename = "C:\\MyDirectory\\MyFile.bat";
// Удалить каталог, если он есть.
// Сделайте это до удаления расширения, если каталог имеет символ точки.
const size_t last_slash_idx = filename.find_last_of("\\/");
if (std::string::npos != last_slash_idx)
{
filename.erase(0, last_slash_idx + 1);
}
// Удалить расширение, если оно есть.
const size_t period_idx = filename.rfind('.');
if (std::string::npos != period_idx)
{
filename.erase(period_idx);
}
Мне пришлось изменить несколько вещей для
примера кода arduino, заменить find_last_of
на lastIndexOf
, стереть
с помощью remove
и rfind
с помощью lastIndexOf
Вот файл ino
#include<string>
void setup() {
Serial.begin(9600);
}
void loop() {
String filename = "C:\MyDirectory\MyFile.bat";
// Удалить каталог, если он есть.
// Сделайте это до удаления расширения, если каталог имеет символ точки.
const size_t last_slash_idx = filename.lastIndexOf("\\");
if (std::string::npos != last_slash_idx)
{
filename.remove(0, last_slash_idx + 1);
}
// Удалить расширение, если оно есть.
const size_t period_idx = filename.lastIndexOf('.');
if (std::string::npos != period_idx)
{
filename.remove(period_idx);
}
Serial.println(filename);
delay(1000);
}
Ожидаемый вывод MyFile
Когда я смотрю в последовательный монитор, я получаю
c$$⸮'<;⸮⸮/<⸮⸮$⸮''⸮;,#$$⸮'<;⸮⸮'<⸮⸮$⸮''⸮:$#$$⸮'<;⸮⸮'<⸮⸮$⸮''⸮;$#$$⸮'
Что я делаю не так?
@Santhosh Dhaipule Chandrakanth, 👍0
Обсуждение1 ответ
#include<string>
Уберите это. Arduino использует свой собственный класс строк, отличный от STL
строка
.
String filename = "C:\MyDirectory\MyFile.bat";
В строках C++ нет escape-последовательности "\M". Ты, наверное, имеешь в виду
"C:\\MyDirectory\\MyFile.bat"
.
const size_t last_slash_idx = filename.lastIndexOf("\\");
Строка::lastIndexOf()
возвращает значение int
, а не size_t
.
if (std::string::npos != last_slash_idx)
Здесь нет строки std::
. Строка::lastIndexOf()
возвращает значение -1
, означающее
, что символ не был найден.
Со всеми этими исправлениями ваш скетч должен работать так, как задумано.
- Проблемы с преобразованием byte[] в String
- ESP32 в Arduino-IDE с FS.h и SPIFFS
- Программаторы для этой платы отсутствуют - Программирование ESP32 Cam с помощью Ardunio IDE
- Установка значения float до двух знаков после запятой
- ESP32-CAM первый: 0x8 TG1WDT_SYS_RESET загрузочный цикл
- esp32 Stack canary watchpoint срабатывает
- Проверка размера во флэш-памяти Esp32
- Ошибка Cast from 'char*' to 'uint8_t {aka unsigned char}' loses precision [-fpermissive]
Вы выбрали 9600 бод в последовательном мониторе?, @chrisl
Да, это было на "9600", @Santhosh Dhaipule Chandrakanth