Проверьте, если строка имеет несколько запятых рядом друг с другом c ++ - PullRequest
0 голосов
/ 26 мая 2018

У меня ~ 3 миллиона строк, которые выглядят примерно так:

INSERT INTO my_table(v1, v2, v3, v4, v5, v6, v7) VALUES(1,'STRING','STRING',,,'STRING','STRING');

Мне нужно написать скрипт, чтобы найти все экземпляры, где есть несколько запятых рядом друг с другом, и вставить null между ними.их.

Я пробовал циклически проходить по строке и проверять каждый символ, но я хотел бы получить более быстрое решение.

Это мое текущее (предлагаемое, но медленное) решение:

char last_char = line.at(0);
for(std::string::iterator i = line.begin(); i != line.end(); ++i) {
    char current_char = line[i];
    if(current_char == ',' && last_char == ',') {
        //Insert null here
    }
    last_char = current_char;
}

Решение должно быть быстрым, поскольку у меня есть примерно 3 метра строк, которые мне нужно преобразовать.

Подводя итог, после запуска скрипта строки должны выглядеть следующим образом:

INSERT INTO my_table(v1, v2, v3, v4, v5, v6, v7) VALUES(1, 'STRING', 'STRING', null, null, 'STRING', 'STRING');

Ответы [ 2 ]

0 голосов
/ 26 мая 2018
auto pos = line.find(",,");
while (pos != std::string::npos)
{
    line.replace(pos, 1, ",null");
    pos = line.find(",,", pos+5);
}

Демонстрационная версия

0 голосов
/ 26 мая 2018
string newString = Regex.Replace(inString, ",(?=,)", ", null");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...