2013-09-16 3 views
1

У меня такая функция (я нашел его где-то, он работает с \t separator).Разделить строку разделителем с помощью векторов - как разделить на новую строку?

vector<string> delimited_str_to_vector(string& str, string delimiter) 
{ 
    vector<string> retVect; 
    size_t pos = 0; 

    while(str.substr(pos).find(delimiter) != string::npos) 
    { 
    retVect.push_back(str.substr(pos, str.substr(pos).find(delimiter))); 
    pos += str.substr(pos).find(delimiter) + delimiter.size(); 
    } 

    retVect.push_back(str.substr(pos)); 

    return retVect; 
} 

У меня проблема с разделительной строкой с помощью разделителя «\ r \ n». Что я делаю не так?

string data = get_file_contents("csvfile.txt"); 
vector<string> csvRows = delimited_str_to_vector(data, "\r\n"); 

Я уверен, что мой файл использует CRLF для новой строки.

+0

Вы читали файл в двоичном режиме? Если вы читаете файл с переводом текста, вам нужно искать только '' \ n''. Вы можете легко узнать, что у вас есть, выгружая строку 'data' в hex из вашей программы. – paddy

+0

Если вы хотите помочь с проблемой, вы всегда должны сказать нам, что эта проблема на самом деле. Что пошло не так? Что происходит? Что вы ожидали вместо этого? – sth

ответ

2

Вы можете использовать getline прочитать файл построчно, который:

извлекает символы из это и хранит их в ул пока размежевание характер DELIM не найден (или символ новой строки «\ п» ...) Если обнаружен разделитель, он извлекается и отбрасывается, то есть он не сохраняется и после него начинается следующая операция ввода.

Возможно, вы уже читали файл через функцию, которая удаляет окончание строки.

+0

Я нашел его. Моя функция для чтения файла удалила мои окончания строк. Благодаря! – Kamil

1

Если вы открываете файл в текстовом режиме, то есть вы не указываете std::ios_base::binary (или одно из его альтернативных написаний), вероятно, что системный конец строк последовательности заменяется на \n символов. То есть, даже если ваш исходный файл используется \r\n, вы можете не видеть эту последовательность символов при чтении файла. Добавьте флаг binary при открытии файла, если вы действительно хотите обработать эти последовательности.

Смежные вопросы