Я прочитал весь файл в строку из памяти сопоставляется файл Win APIC++ Разбор строки из большого файла
CreateFile("WarandPeace.txt", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
и т.д ...
Каждая строка завершается с CRLF , Мне нужно найти что-то на строке типа «Спам» в строке «Я люблю спам и яйца» (и вернуть всю строку (без CRLF) в строку (или указатель на местоположение в строке) Исходная строка не может быть изменен
EDITED:.
Что-то вроде этого:.
string ParseStr(string sIn, string sDelim, int nField)
{
int match, LenStr, LenDelim, ePos, sPos(0), count(0);
string sRet;
LenDelim = sDelim.length();
LenStr = sIn.length();
if(LenStr < 1 || LenDelim < 1) return ""; // Empty String
if(nField < 1) return "";
//=========== cout << "LenDelim=" << LenDelim << ", sIn.length=" << sIn.length() << endl;
for(ePos=0; ePos < LenStr; ePos++) // iterate through the string
{ // cout << "sPos=" << sPos << ", LenStr=" << LenStr << ", ePos=" << ePos << ", sIn[ePos]=" << sIn[ePos] << endl;
match = 1; // default = match found
for(int k=0; k < LenDelim; k++) // Byte value
{
if(ePos+k > LenStr) // end of the string
break;
else if(sIn[ePos+k] != sDelim[k]){ // match failed
match = 0; break; }
}
//===========
if(match || (ePos == LenStr-1)) // process line
{
if(!match) ePos = LenStr + LenDelim; // (ePos == LenStr-1)
count++; // cout << "sPos=" << sPos << ", ePos=" << ePos << " >" << sIn.substr(sPos, ePos-sPos) << endl;
if(count == nField){ sRet = sIn.substr(sPos, ePos-sPos); break; }
ePos = ePos+LenDelim-1; // jump over Delim
sPos = ePos+1; // Begin after Delim
} // cout << "Final ePos=" << ePos << ", count=" << count << ", LenStr=" << LenStr << endl;
}// next
return sRet;
}
Если вам это нравится, проголосуйте за него Если нет, то давайте посмотрим, что вы получили
CreateFile() не отображает карту памяти. Это только открывает его. Вы на самом деле вызываете CreateFileMapping() и MapViewOfFile() после этого? –
Еще один запутанный аспект: если вы на самом деле карте памяти, то зачем копировать его в строку? –
Это упражнение при разборе. Но есть моменты, когда вам нужно разбирать строки из файла с отображением памяти или даже ответа от HTTP-запроса и т. Д. –