This commit is contained in:
2013-10-20 10:04:24 +00:00
parent b7306cb084
commit d63efb5f21
5 changed files with 163 additions and 68 deletions

View File

@@ -36,8 +36,29 @@ void CCondition::Finalize()
m_arrManual.RemoveAll(); m_arrManual.RemoveAll();
} }
void CCondition::LoadSysnonyms(const CString& FileName)
{
FILE* fp = fopen(FileName.GetString(), "rt");
if(fp == NULL)
return;
m_SynonymList.clear();
char szNameFrom[100];
char szNameTo[100];
while(!feof(fp))
{
fscanf(fp, "%s %s\n", szNameFrom, szNameTo);
m_SynonymList[szNameFrom] = szNameTo;
}
fclose(fp);
}
BOOL CCondition::Refresh() BOOL CCondition::Refresh()
{ {
LoadSysnonyms("기업_동의어.txt");
if( Init_Item_Multi( m_arrTextNot, "공시_부정문구.txt" ) ) if( Init_Item_Multi( m_arrTextNot, "공시_부정문구.txt" ) )
if( Init_Item_Multi( m_arrTextAnd, "공시_긍정문구.txt" ) ) if( Init_Item_Multi( m_arrTextAnd, "공시_긍정문구.txt" ) )
if( Init_Item_Multi( m_arrNewsPlusAnd_Special, "뉴스플러스_특별용_긍정문구.txt" ) ) if( Init_Item_Multi( m_arrNewsPlusAnd_Special, "뉴스플러스_특별용_긍정문구.txt" ) )
@@ -241,14 +262,14 @@ enum HM_CONDITION_TYPE CCondition::DetectConditionTitle( CString & strTitle, int
{ {
if( ! SearchNot( m_arrNewsPlusNot, strTitle ) ) // [뉴스플러스_부정문구]를 찾는다. if( ! SearchNot( m_arrNewsPlusNot, strTitle ) ) // [뉴스플러스_부정문구]를 찾는다.
{ {
if ( SearchAnd( m_arrManual, strTitle ) ) // [뉴스플러스_수동문구]를 찾는다.
return HM_CONDITION_TYPE_MANUAL;
if( SearchAnd( m_arrNewsPlusAnd_Special, strTitle ) ) // [뉴스플러스_특별용_긍정문구]를 찾는다. if( SearchAnd( m_arrNewsPlusAnd_Special, strTitle ) ) // [뉴스플러스_특별용_긍정문구]를 찾는다.
return HM_CONDITION_TYPE_SPECIAL; return HM_CONDITION_TYPE_SPECIAL;
if ( SearchAnd( m_arrNewsPlusAnd_Normal, strTitle ) ) // [뉴스플러스_일반용_긍정문구]를 찾는다. if ( SearchAnd( m_arrNewsPlusAnd_Normal, strTitle ) ) // [뉴스플러스_일반용_긍정문구]를 찾는다.
return HM_CONDITION_TYPE_NORMAL; return HM_CONDITION_TYPE_NORMAL;
if ( SearchAnd( m_arrManual, strTitle ) ) // [뉴스플러스_수동문구]를 찾는다.
return HM_CONDITION_TYPE_MANUAL;
} }
} }
else // TK, IM, 7121 공통. else // TK, IM, 7121 공통.

View File

@@ -9,6 +9,11 @@
#pragma once #pragma once
#endif // _MSC_VER > 1000 #endif // _MSC_VER > 1000
#include <map>
#include <string>
enum HM_CONDITION_TYPE enum HM_CONDITION_TYPE
{ {
HM_CONDITION_TYPE_FALSE = -1, HM_CONDITION_TYPE_FALSE = -1,
@@ -34,6 +39,8 @@ public:
// 공시 문장분석 : 긍정/부정. // 공시 문장분석 : 긍정/부정.
enum HM_CONDITION_TYPE DetectConditionTitle( CString & strTitle, int nSrcType ); enum HM_CONDITION_TYPE DetectConditionTitle( CString & strTitle, int nSrcType );
std::map<std::string, std::string> m_SynonymList;
private: private:
BOOL Init_Item_Single( CStringArray &array, CString strFile ); BOOL Init_Item_Single( CStringArray &array, CString strFile );
BOOL Init_Item_Multi( CStringArray &array, CString strFile ); BOOL Init_Item_Multi( CStringArray &array, CString strFile );
@@ -43,7 +50,8 @@ private:
// Not 검색기능. // Not 검색기능.
BOOL SearchNot( CStringArray &array, CString &strSource ); BOOL SearchNot( CStringArray &array, CString &strSource );
private: void LoadSysnonyms(const CString& FileName);
CStringArray m_arrTextNot; // 공시 부정문구. CStringArray m_arrTextNot; // 공시 부정문구.
CStringArray m_arrTextAnd; // 공시 긍정문구. CStringArray m_arrTextAnd; // 공시 긍정문구.
@@ -53,6 +61,8 @@ private:
CStringArray m_arrNewsPlusNot; // 뉴스플러스_부정문구. CStringArray m_arrNewsPlusNot; // 뉴스플러스_부정문구.
CStringArray m_arrManual; // 수동 문구. CStringArray m_arrManual; // 수동 문구.
}; };
#endif // !defined(AFX_CONDITION_H__44C2F7E9_C1A6_4017_9143_69C3C4FC9E54__INCLUDED_) #endif // !defined(AFX_CONDITION_H__44C2F7E9_C1A6_4017_9143_69C3C4FC9E54__INCLUDED_)

View File

@@ -324,6 +324,7 @@ BOOL CHookMsgDlg::OnInitDialog()
CDialog::OnInitDialog(); CDialog::OnInitDialog();
m_bInitSuccess = TRUE; m_bInitSuccess = TRUE;
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
TraceMsg( "[초기화] 환경파일 검사중..." ); TraceMsg( "[초기화] 환경파일 검사중..." );
CFileFind _file; CFileFind _file;
@@ -1414,26 +1415,31 @@ BOOL CHookMsgDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{ {
memset(m_szTitle, NULL, MAX_RECEIVE_LEN); memset(m_szTitle, NULL, MAX_RECEIVE_LEN);
memcpy(m_szTitle, cpData.ExtraData, strlen((char*)cpData.ExtraData) ); memcpy(m_szTitle, cpData.ExtraData, strlen((char*)cpData.ExtraData) );
} else { }
else
{
DWORD dwWritten; DWORD dwWritten;
switch(cpData.lParam) { switch(cpData.lParam)
{
// 시간 // 시간
case 1: case 1:
memcpy(m_szWnd3_Time, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1); memcpy(m_szWnd3_Time, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1);
m_szWnd3_Title[0] = NULL;
m_szWnd3_Name[0] = NULL;
break; break;
// 타이틀 // 타이틀
case 2: case 2:
memcpy(m_szWnd3_Title, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1); memcpy(m_szWnd3_Title, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1);
TRACE("[2]%s\n",m_szWnd3_Title); TRACE("[2]%s(%s)\n", m_szWnd3_Title, m_szWnd3_Name);
break; break;
// 종목명 // 종목명
case 3: case 3:
TRACE("[3]%s\n",m_szWnd3_Title);
memcpy(m_szWnd3_Name, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1); memcpy(m_szWnd3_Name, cpData.ExtraData, strlen((char*)cpData.ExtraData)+1);
TRACE("[3]%s(%s)\n", m_szWnd3_Title, m_szWnd3_Name);
if(m_szWnd3_Name[0] != 0) { if(m_szWnd3_Name[0] != 0)
{
WriteFile(hFile,m_szWnd3_Time,strlen(m_szWnd3_Time),&dwWritten,NULL); WriteFile(hFile,m_szWnd3_Time,strlen(m_szWnd3_Time),&dwWritten,NULL);
WriteFile(hFile,"\n",1,&dwWritten,NULL); WriteFile(hFile,"\n",1,&dwWritten,NULL);
WriteFile(hFile,m_szWnd3_Title,strlen(m_szWnd3_Title),&dwWritten,NULL); WriteFile(hFile,m_szWnd3_Title,strlen(m_szWnd3_Title),&dwWritten,NULL);
@@ -1483,7 +1489,8 @@ BOOL CHookMsgDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
} }
else else
{ {
if(RetrieveNewsData()) { if(RetrieveNewsData())
{
m_pWorkEvent2->SetEvent(); m_pWorkEvent2->SetEvent();
m_pWorkEvent->SetEvent(); m_pWorkEvent->SetEvent();
} }
@@ -1562,6 +1569,49 @@ BOOL CHookMsgDlg::_ExtractJCode( int nSrcType, CString & _strTitle, CString & st
//~! //~!
strJCode = (LPCSTR)objStockCode->NameToCode( m_szWnd3_Name ); strJCode = (LPCSTR)objStockCode->NameToCode( m_szWnd3_Name );
// 제목에서 코드 찾기
{
CString Name = "";
CString Code = "";
CString strTitleTmp = m_szWnd3_Title;
int iCommaPos = strTitleTmp.Find(",");
if(iCommaPos >= 0)
{
Name = GetLastWord(strTitleTmp.Left(iCommaPos));
}
else
{
int iSpacePos = strTitleTmp.Find(" ");
Name = strTitleTmp.Left(iSpacePos);
}
ICpStockCodePtr objStockCode;
objStockCode.CreateInstance( CLSID_CpStockCode );
Code = (LPCSTR)objStockCode->NameToCode((bstr_t)(LPCSTR)Name);
if(Code[0] != NULL)
{
strJCode = Code;
strJName = Name;
}
else if(g_Condition.m_SynonymList[Name.GetString()] != "")
{
Name = g_Condition.m_SynonymList[Name.GetString()].data();
Code = (LPCSTR)objStockCode->NameToCode((bstr_t)Name.GetString());
if(Code[0] != NULL)
{
strJCode = Code;
strJName = Name;
}
}
objStockCode.Release();
}
bRet = TRUE; bRet = TRUE;
} }
else if( nSrcType == UM_SRC_INFOTICKER ) else if( nSrcType == UM_SRC_INFOTICKER )
@@ -1810,6 +1860,21 @@ void CHookMsgDlg::_WorkThreadProc(UINT ThreadType)
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// 제목만으로 조건검색을 진행함! // 제목만으로 조건검색을 진행함!
HM_CONDITION_TYPE ConditionType = g_Condition.DetectConditionTitle( g_strTitle, _nSourceFrom ); HM_CONDITION_TYPE ConditionType = g_Condition.DetectConditionTitle( g_strTitle, _nSourceFrom );
//////////////////////////////////////////////////////
// 종목코드 자동입력.
if( WORD_THREAD_WITH_HOGA == ThreadType && (bSuccess || InputCodeTypeStatus(_nSourceFrom)) )
{
TraceMsg( strSrc + "[종목코드 자동입력] : " + g_strJCode + ", " + g_strJName, TxtColor, BgColor, TRUE );
AutoInputJongmokCode(_nSourceFrom, g_strJCode.Right(6) );
if( g_AppEnv.bJInputAndStop2 ) // 2003-11-15 코드삭제. 2004.4.28 추가변경.
{
OnMonitorPause();
}
}
if( ConditionType != HM_CONDITION_TYPE_FALSE ) if( ConditionType != HM_CONDITION_TYPE_FALSE )
{ {
try try
@@ -2169,19 +2234,6 @@ _LAST_JOB_:
// 무조건 한번 나온 종목은 [중복종목]에 등록함! // 무조건 한번 나온 종목은 [중복종목]에 등록함!
g_pStockData->AddRepeatedCode( g_strJCode ); g_pStockData->AddRepeatedCode( g_strJCode );
//////////////////////////////////////////////////////
// 종목코드 자동입력.
if( WORD_THREAD_WITH_HOGA == ThreadType && (bSuccess || InputCodeTypeStatus(_nSourceFrom)) )
{
TraceMsg( strSrc + "[종목코드 자동입력] : " + g_strJCode + ", " + g_strJName, TxtColor, BgColor, TRUE );
AutoInputJongmokCode(_nSourceFrom, g_strJCode.Right(6) );
if( g_AppEnv.bJInputAndStop2 ) // 2003-11-15 코드삭제. 2004.4.28 추가변경.
{
OnMonitorPause();
}
}
return; return;
} }
@@ -2699,19 +2751,20 @@ LRESULT CHookMsgDlg::OnTickerSocketReceive(WPARAM wParam, LPARAM lClient)
return 0; return 0;
} }
CString GetLastWord(const CString& strSource) CString CHookMsgDlg::GetLastWord(const CString& strSource) const
{ {
CString strTmp = strSource; CString strTmp = strSource;
int iPos = 0; int iPos = 0;
CString strRes1 = ""; CString strRes1 = "";
CString strRes2 = ""; CString strRes2 = "";
CString szToken = "\"\')]\t ";
strRes2 = strTmp.Tokenize(")]\t ", iPos); strRes2 = strTmp.Tokenize(szToken, iPos);
while (strRes2 != "") while (strRes2 != "")
{ {
strRes1 = strRes2; strRes1 = strRes2;
strRes2 = strTmp.Tokenize(")]\t ", iPos); strRes2 = strTmp.Tokenize(szToken, iPos);
} }
return strRes1; return strRes1;
@@ -2728,39 +2781,41 @@ bool CHookMsgDlg::RetrieveNewsData()
// 타이틀 정보 저장 // 타이틀 정보 저장
if(m_nSourceFrom == UM_HOOKOK_WND1 || m_nSourceFrom == UM_HOOKOK_WND2) if(m_nSourceFrom == UM_HOOKOK_WND1 || m_nSourceFrom == UM_HOOKOK_WND2)
{
n_strTitle = m_szTitle; n_strTitle = m_szTitle;
}
else if(m_nSourceFrom == UM_HOOKOK_WND3) else if(m_nSourceFrom == UM_HOOKOK_WND3)
{ {
// 종목명이 없는 정보는 무시한다. //// 종목명이 없는 정보는 무시한다.
if(m_szWnd3_Name[0] == 0) //if(m_szWnd3_Name[0] == 0)
{ //{
CString Name; // CString Name;
// CString strTitleTmp = m_szWnd3_Title;
//
// int iCommaPos = strTitleTmp.Find(",");
// if(iCommaPos >= 0)
// {
// Name = GetLastWord(strTitleTmp.Left(iCommaPos));
// }
// else
// {
// int iSpacePos = strTitleTmp.Find(" ");
// Name = strTitleTmp.Left(iSpacePos);
// }
CString strTitleTmp = m_szWnd3_Title; // ICpStockCodePtr objStockCode;
// objStockCode.CreateInstance( CLSID_CpStockCode );
// CString Code = (LPCSTR)objStockCode->NameToCode((bstr_t)(LPCSTR)Name);
// objStockCode.Release();
int iCommaPos = strTitleTmp.Find(","); // if(Code[0] == NULL)
if(iCommaPos >= 0) // return false;
{
Name = GetLastWord(strTitleTmp.Left(iCommaPos));
}
else
{
int iSpacePos = strTitleTmp.Find(" ");
Name = strTitleTmp.Left(iSpacePos);
}
ICpStockCodePtr objStockCode; // strcpy(m_szWnd3_Name, Name.GetString());
objStockCode.CreateInstance( CLSID_CpStockCode ); // n_strJCode = Code;
CString Code = (LPCSTR)objStockCode->NameToCode((bstr_t)(LPCSTR)Name); //}
objStockCode.Release(); //n_strTitle = m_szWnd3_Title;
//n_strJName = m_szWnd3_Name;
if(Code[0] == NULL)
return false;
strcpy(m_szWnd3_Title, Name.GetString());
}
n_strTitle = m_szWnd3_Title;
n_strJName = m_szWnd3_Name;
} }
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
@@ -2769,13 +2824,16 @@ bool CHookMsgDlg::RetrieveNewsData()
// NewsPlus -> 7001 // NewsPlus -> 7001
if(m_nSourceFrom == UM_HOOKOK_WND3 && if(m_nSourceFrom == UM_HOOKOK_WND3 &&
g_nSourceFrom == UM_HOOKOK_WND2 && g_nSourceFrom == UM_HOOKOK_WND2 &&
!n_strTitle.Compare(g_strTitle.Right(g_strTitle.GetLength()-6))) { !n_strTitle.Compare(g_strTitle.Right(g_strTitle.GetLength()-6)))
{
TraceMsg(n_strTitle+"[NewsPLus->7001,동일뉴스 스킵]", CXListBox::Red, CXListBox::Yellow, TRUE ); TraceMsg(n_strTitle+"[NewsPLus->7001,동일뉴스 스킵]", CXListBox::Red, CXListBox::Yellow, TRUE );
return false; return false;
// 7001 -> NewsPlus // 7001 -> NewsPlus
} else if(m_nSourceFrom == UM_HOOKOK_WND2 && }
else if(m_nSourceFrom == UM_HOOKOK_WND2 &&
g_nSourceFrom == UM_HOOKOK_WND3 && g_nSourceFrom == UM_HOOKOK_WND3 &&
!g_strTitle.Compare(n_strTitle.Right(n_strTitle.GetLength()-6))) { !g_strTitle.Compare(n_strTitle.Right(n_strTitle.GetLength()-6)))
{
TraceMsg(n_strTitle+"[7001->NewsPLus,동일뉴스 스킵]", CXListBox::Red, CXListBox::Yellow, TRUE ); TraceMsg(n_strTitle+"[7001->NewsPLus,동일뉴스 스킵]", CXListBox::Red, CXListBox::Yellow, TRUE );
return false; return false;
} }
@@ -2788,6 +2846,11 @@ bool CHookMsgDlg::RetrieveNewsData()
return false; return false;
} }
if(n_strJCode[0] == NULL)
return false;
dwRetEnd = ::GetTickCount(); dwRetEnd = ::GetTickCount();
CString strTime; CString strTime;
strTime.Format("(%d ms)",dwRetEnd - dwRetStart); strTime.Format("(%d ms)",dwRetEnd - dwRetStart);

View File

@@ -17,6 +17,9 @@
#include "TickerSocket.h" #include "TickerSocket.h"
#include <map>
#include <string>
#define WM_ICON_NOTIFY WM_USER+10 #define WM_ICON_NOTIFY WM_USER+10
@@ -112,7 +115,9 @@ private:
void HLStockWindowShow( CString strJCode, CString strExtraData = "" ); void HLStockWindowShow( CString strJCode, CString strExtraData = "" );
void ShowHideLockControlDlg( BOOL bShow ); void ShowHideLockControlDlg( BOOL bShow );
CLockControlDlg * m_pLCDlg; CString GetLastWord(const CString& strSource) const;
CLockControlDlg* m_pLCDlg;
CFont m_LockUnlockBtnFont; CFont m_LockUnlockBtnFont;

View File

@@ -1,12 +1,8 @@
14:21 09:00
우진 농심, 3Q 실적 부진..라면 점유율 개선 지연-한국
우진 농심
14:21 09:00
키움증권, 달러선물, 국채선물 수수료 무료 이벤트 솔브레인, 대표이사 50만주 장내 매도
키움증권 솔브레인
14:21
우진
우진