📄 databuffer.cpp
字号:
#include "stdafx.h"
#include "DataBuffer.h"
#define IsDigital(C) (('0' <= (C)) && ((C) <= '9'))
#define CONST_STRING ",150,0,0,0"
const char* szMark[] = { "UT","mb","kt" };
CDataBuffer::CDataBuffer()
{
}
CDataBuffer::~CDataBuffer()
{
Clear();
}
void CDataBuffer::AddString(CString& csValue)
{
if ( !VerifyString(csValue) )
return ;
CString csName;
csName = GetName(csValue);
DATARECORD* pRecord;
int nCount = m_Recordset.GetSize();
for (int i = 0 ; i < nCount ; i++)
{
pRecord = (DATARECORD*)m_Recordset.GetAt(i);
if ( pRecord )
{
if ( !strcmp( csName.GetBuffer(csName.GetLength()), pRecord->szName ) )
{
pRecord->dataList.AddTail(csValue);
return;
}
}
}
pRecord = new DATARECORD;
if ( pRecord == NULL )
{
::AfxMessageBox("分配内存失败!");
return;
}
memset( pRecord->szName , 0 , 64);
strcpy( pRecord->szName , csName.GetBuffer(csName.GetLength()));
pRecord->dataList.AddHead(csValue);
m_Recordset.Add(pRecord);
}
void CDataBuffer::Clear()
{
DATARECORD* pRecord;
int i = m_Recordset.GetSize()-1;
for ( ; i >= 0 ; i--)
{
pRecord = (DATARECORD*)m_Recordset.GetAt(i);
m_Recordset.RemoveAt(i);
if ( pRecord != NULL )
delete pRecord;
}
}
UINT32 CDataBuffer::GetCount()
{
return m_Recordset.GetSize();
}
BOOL CDataBuffer::VerifyString(CString& csValue)
{
int i,nPos;
for ( i = 0 ; i < 4 ; i++ )
{
if ( !IsDigital(csValue.GetAt(i)) )
return FALSE;
}
for ( i = 0 ; i < 3 ; i++ )
{
nPos = csValue.Find( szMark[i]);
if ( nPos <= 0 )
return FALSE;
}
return TRUE;
}
CString CDataBuffer::GetName(CString& csValue)
{
int nPos1,nPos2;
CString csName = _T("");
nPos1 = csValue.Find("W",0);
nPos2 = csValue.Find("E",0);
if ( nPos1 <= 0 && nPos2 <= 0 )
return _T("");
if ( nPos1 >0 && nPos2 >0 && nPos1 > nPos2)
nPos1 = nPos2;
else if ( nPos1 < 0 )
nPos1 = nPos2;
nPos2 = csValue.Find(" " , nPos1+2);
if ( nPos2 <= 0 )
return _T("");
csName = csValue.Mid(nPos1+2 , nPos2 - nPos1-2);
return csName;
}
BOOL CDataBuffer::OutputData(CString csFileName)
{
int nPos1,nPos2,nPos3;;
DATARECORD* pRecord;
CStdioFile fd;
//"West Pacific","KATE",9901,"中央气象台","Finish"
fd.Open(csFileName , CFile::modeCreate | CFile::modeReadWrite);
if (fd.m_hFile == NULL )
return FALSE;
int i,j;
int nCount = m_Recordset.GetSize();
for (i = 0 ; i < nCount ; i++)
{
pRecord = (DATARECORD*)m_Recordset.GetAt(i);
if ( pRecord )
{
CString csValue = pRecord->dataList.GetAt((pRecord->dataList.FindIndex(0)));
fd.WriteString("\"");
fd.WriteString("West Pacific");
fd.WriteString("\",");
fd.WriteString("\"");
fd.WriteString(pRecord->szName);
fd.WriteString("\",");
fd.WriteString(csValue.Left(4));
fd.WriteString(",\"");
fd.WriteString("中央气象台");
fd.WriteString("\",");
fd.WriteString("\"");
fd.WriteString("Finish");
fd.WriteString("\"\n");
for ( j = 0 ; j < pRecord->dataList.GetCount() ; j++ )
{
CString csValue = pRecord->dataList.GetAt(pRecord->dataList.FindIndex(j));
CString csResult = "#";
CString csTemp;
nPos3 = csValue.Find("UT");
csResult = csResult + csValue.Left(4) + "-";
csTemp = csValue.Mid(5,2);
csTemp.TrimRight();
if ( csTemp.GetLength() < 2)
csTemp = "0" + csTemp;
csResult = csResult + csTemp + "-" + csValue.Mid(7,2) + " " + csValue.Mid(10,2) + ":00:00#";
nPos1 = csValue.Find("N",0);
nPos2 = csValue.Find("S",0);
if ( nPos1 > 0 && nPos2 > 0 && nPos1 <= nPos2 )
{
csResult = csResult + ",0," + csValue.Mid(nPos3 + 3,nPos1-nPos3-4) + ",";
nPos3 = nPos1 + 2;
}
else if ( nPos1 > 0 && nPos2 > 0 && nPos1 > nPos2 )
{
csResult = csResult + ",0,-" + csValue.Mid(nPos3 + 3,nPos2-nPos3-4) + ",";
nPos3 = nPos2 + 2;
}
else if ( nPos1 > 0 && nPos2 < 0 )
{
csResult = csResult + ",0," + csValue.Mid(nPos3 + 3,nPos1-nPos3-4) + ",";
nPos3 = nPos1 + 2;
}
else if ( nPos1 < 0 && nPos2 > 0 )
{
csResult = csResult + ",0,-" + csValue.Mid(nPos3 + 3,nPos2-nPos3-4) + ",";
nPos3 = nPos2 + 2;
}
nPos1 = csValue.Find("E",0);
nPos2 = csValue.Find("W",0);
if ( nPos1 > 0 && nPos2 > 0 && nPos1 <= nPos2 )
csResult = csResult + csValue.Mid(nPos3,nPos1-nPos3);
else if ( nPos1 > 0 && nPos2 > 0 && nPos1 > nPos2 )
csResult = csResult + "-" + csValue.Mid(nPos3,nPos2-nPos3);
else if ( nPos1 > 0 && nPos2 < 0 )
csResult = csResult + csValue.Mid(nPos3,nPos1-nPos3);
else if ( nPos1 < 0 && nPos2 > 0 )
csResult = csResult + "-" + csValue.Mid(nPos3,nPos2-nPos3);
nPos1 = csValue.Find("kt",0);
nPos2 = csValue.Find("mb",0);
if ( nPos1 <= 0 || nPos2 <= 0 )
continue;
csResult = csResult + "," + csValue.Mid(nPos1+3,nPos2-nPos1-4);
nPos2 += 3;
nPos1 = csValue.Find(" ",nPos2);
if ( nPos1 <= 0 )
continue;
csTemp = csValue.Mid(nPos2,nPos1-nPos2);
if ( csTemp.GetLength() == 2)
csTemp = "0" + csTemp;
else if ( csTemp.GetLength() == 1)
csTemp = "0" + csTemp;
else if ( csTemp.GetLength() > 3)
continue;
csResult = csResult + "," + csTemp + CONST_STRING;
fd.WriteString(csResult);
//fd.WriteString(pRecord->dataList.GetAt(pRecord->dataList.FindIndex(j)));
fd.WriteString("\n");
}
fd.WriteString("#1899-12-30#,0,0,0,0,0,0,0,0,0\n");
}
}
fd.Close();
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -