📄 ngtextbuffer.cpp
字号:
// NGTextBuffer.cpp : implementation file
//
#include "StdAfx.h"
#include "NGTextBuffer.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNGTextBuffer
#define BUFFER_GROWBY 100 // Grow file buffer by 100 lines at a time
//#define BUF_SIZE 1024
IMPLEMENT_DYNAMIC(CNGTextBuffer, CNGTextBuffer_BASE)
CNGTextBuffer::CNGTextBuffer(void)
{
}
CNGTextBuffer::~CNGTextBuffer(void)
{
}
/////////////////////////////////////////////////////////////////////////////
// CNGTextBuffer overrides
void CNGTextBuffer::Serialize(CArchive& ar)
{
ASSERT_VALID(this);
CWaitCursor WaitCursor;
m_sFileName = ar.GetFile()->GetFilePath();
if (ar.IsLoading())
{ // loading code
Read(ar);
}
else
{ // storing code
Write(ar);
}
}
void CNGTextBuffer::RemoveAll(void)
{
m_arrayLines.RemoveAll();
}
/////////////////////////////////////////////////////////////////////////////
// Operations
CString& CNGTextBuffer::operator[](int nIndex)
{
return m_arrayLines[nIndex];
}
CString CNGTextBuffer::operator[](int nIndex) const
{
return m_arrayLines[nIndex];
}
/////////////////////////////////////////////////////////////////////////////
// File Read Implementation
/******************************************************************************
* Read from an archive
*
******************************************************************************/
BOOL CNGTextBuffer::Read(CArchive& ar)
{
BOOL bResult = FALSE;
// First read the entire file into a buffer for processing
m_arrayLines.SetSize(0, BUFFER_GROWBY);
int nTotalLines = 0;
while (TRUE)
{
CString sData;
if (!ar.ReadString(sData))
{
TRACE1("End of file reached; %d lines read\n", nTotalLines);
break;
}
nTotalLines++;
// Expand tabs
// sData = UnTabify(sData, 8);
m_arrayLines.Add(sData);
}
if (m_arrayLines.GetSize() > 0)
{
// The file definitely exists and has been read successfully
// From here on in its up to the parser...
Parse();
}
else
{
//Error(ERR_FILE_EMPTY, ar.GetFile()->GetFilePath());
AfxMessageBox("File is empty!"); // temp - should be in string table anyhow
}
return bResult;
}
/******************************************************************************
* Parse the whole buffer
*
******************************************************************************/
BOOL CNGTextBuffer::Parse(void)
{
if (m_arrayLines.GetSize() > 0)
{
// The file definitely exists and has been read successfully
// From here on in its up to the parser...
for (int nLineNo = 0; nLineNo < m_arrayLines.GetSize(); nLineNo++)
{
CString sLine = m_arrayLines[nLineNo];
/*
// Check line length
if (sLine.GetLength() > BUF_SIZE)
{
// Error(ERR_LINE_LEN_EXCEEDED);
AfxMessageBox("Line Length Exceeded"); // temp - should be in string table anyhow
break;
}
*/
Parse(sLine);
}
return TRUE;
}
return FALSE;
}
/******************************************************************************
* Parse the given line
*
******************************************************************************/
BOOL CNGTextBuffer::Parse(const CString& /*rsLine*/)
{
return FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// File Write Implementation
/******************************************************************************
* Write the buffer to an archive
*
******************************************************************************/
BOOL CNGTextBuffer::Write(CArchive& ar)
{
BOOL bResult = TRUE;
if (m_arrayLines.GetSize() > 0)
{
for (int nLine = 0; nLine <= m_arrayLines.GetUpperBound(); nLine++)
{
TRY
{
ar.WriteString( m_arrayLines[nLine] + _T("\r\n") );
}
CATCH( CFileException, e )
{
CString sMsg;
//sMsg.Format(IDP_ERR_WRITING_FILE, ar.GetFile()->GetFilePath());
sMsg.Format(_T("Error writing file %s"), ar.GetFile()->GetFilePath());
AfxMessageBox(sMsg, MB_OK | MB_ICONSTOP);
bResult = FALSE;
}
END_CATCH
}
}
return bResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -