Untitled
unknown
plain_text
a year ago
2.8 kB
7
Indexable
void cleanETL()
{
// Get the current Scintilla handle
int which = -1;
::SendMessage(nppData._nppHandle, NPPM_GETCURRENTSCINTILLA, 0, (LPARAM)&which);
if (which == -1) return;
HWND curScintilla = (which == 0) ? nppData._scintillaMainHandle : nppData._scintillaSecondHandle;
// Get the current document text
Sci_Position textLength = (Sci_Position)::SendMessage(curScintilla, SCI_GETLENGTH, 0, 0);
if (textLength == 0) {
::MessageBoxA(NULL, "The document is empty.", "ETL Cleaning", MB_OK | MB_ICONINFORMATION);
return;
}
std::string cleanedContent;
const Sci_Position bufferSize = 4096;
char* buffer = new char[bufferSize];
std::string currentLine;
bool inLogEntry = false;
for (Sci_Position i = 0; i < textLength; i += bufferSize - 1) {
Sci_Position bytesToRead = (std::min)(bufferSize - 1, textLength - i);
Sci_TextRangeFull textRange;
textRange.chrg.cpMin = i;
textRange.chrg.cpMax = i + bytesToRead;
textRange.lpstrText = buffer;
::SendMessage(curScintilla, SCI_GETTEXTRANGEFULL, 0, (LPARAM)&textRange);
buffer[bytesToRead] = '\0';
for (Sci_Position j = 0; j < bytesToRead; ++j) {
char c = buffer[j];
if (c >= 32 || c == '\n' || c == '\r' || c == '\t') {
currentLine += c;
if (c == '\n') {
// Check if this line is likely a log entry
if (!currentLine.empty() && currentLine.find_first_not_of(" \t\r\n") != std::string::npos) {
cleanedContent += currentLine;
inLogEntry = true;
}
currentLine.clear();
}
} else {
// If we encounter a non-printable character, clear the current line
currentLine.clear();
inLogEntry = false;
}
}
}
// Add any remaining content
if (!currentLine.empty() && inLogEntry) {
cleanedContent += currentLine + "\n";
}
delete[] buffer;
// Create a new document and set the cleaned content
::SendMessage(nppData._nppHandle, NPPM_MENUCOMMAND, 0, IDM_FILE_NEW);
int newWhich = -1;
::SendMessage(nppData._nppHandle, NPPM_GETCURRENTSCINTILLA, 0, (LPARAM)&newWhich);
HWND newScintilla = (newWhich == 0) ? nppData._scintillaMainHandle : nppData._scintillaSecondHandle;
::SendMessage(newScintilla, SCI_SETTEXT, 0, (LPARAM)cleanedContent.c_str());
::MessageBoxA(NULL, "ETL file has been cleaned and results written to a new document.", "ETL Cleaning", MB_OK | MB_ICONINFORMATION);
}
Editor is loading...
Leave a Comment