亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? extract.cpp

?? 有關于C++網絡傳輸操作的一個DLL開發,希望對學習C++的人有幫助
?? CPP
字號:

#include "StdAfx.h"
#include "Extract.h"
#include "windows.h"
#include ".\extract.h"

Extract::Extract()
{	
	strUseful = STR_USEFUL ;           // "<TITLE>,<TR>,<TD>,<P>,<BR>,<DIV>"
}


//--------------------------------------------------------------------------------
// FUNCTION: 打開網頁文件,去除標簽,提取內容。
// IN      : 網頁文件(*.htm/html)。
// NOTE    : 
//--------------------------------------------------------------------------------
void Extract::funProcess(string &filestring)
{
	
	string strLine,strResult;
	int i = 1 , j = 1 ;

	strResult =filestring ;

	funConvCapital(strResult);	
	
	funDelete2(strResult,"SCRIPT",0);    //去除<SCRIPT></SCRIPT>間的內容
	funDelete2(strResult,"STYLE",0);     //去除<STYLE></STYLE>間的內容
	funDelete2(strResult,"XML",0);     //去除<XML></XML>間的內容

	if ( STR_A ) funDelete2(strResult,"A",0); 
	funDelete(strResult,"<A");         //將<A ...>變為<A>
	funDelete(strResult,"<P");         //將<P ...>變為<P>
	funDelete(strResult,"<TD");

	if ( STR_REPLACE_VERTICAL ) funReplace(strResult,"|"," "); 
	//if ( STR_SPACE )   funReplace(strResult," ",""); //是否刪除所有空格

	funDelUselessLink(strResult);      //刪除無用鏈接

	funKeepListLabel(strResult,0);     //0表示從第一個字符開始查找
	 
	funReplace(strResult,"	"," ");      //用空格替換TAB
	funReplace(strResult,"  "," ");      //最多保留一個空格

	funDelBegAnd(strResult,0);  //替換以&開頭以;結束的字符串

	filestring = funReplaceReturnAndEnter(strResult.c_str());
	
}


//--------------------------------------------------------------------------------
// FUNCTION: 將小寫字母轉為大寫。
// IN      : 一行。
// OUT     : 
// NOTE    : 
//--------------------------------------------------------------------------------
void Extract::funConvCapital(string& strLine)
{
	if(STR_TI_CAPITAL)  
	{
		funReplace(strLine,"<ti","<TI");
		funReplace(strLine,"</ti","</TI");
	}
	if(STR_TR_CAPITAL)  
	{
		funReplace(strLine,"<tr","<TR");
		funReplace(strLine,"</tr","</TR");
	}
	if(STR_TD_CAPITAL)  
	{
		funReplace(strLine,"<td","<TD");
		funReplace(strLine,"</td","</TD");
	}
	if(STR_P_CAPITAL)   
	{
		funReplace(strLine,"<p","<P");
	}
	if(STR_BR_CAPITAL)  
	{
		funReplace(strLine,"<br","<BR"); 
	}
	if(STR_DI_CAPITAL)  
	{
		funReplace(strLine,"<di","<DI");
		funReplace(strLine,"</di","</DI");
	}
	if(STR_XML_CAPITAL) 
	{
		funReplace(strLine,"xml","XML");
	}
	if(STR_A_CAPITAL ) 
	{		
		funReplace(strLine,"<a","<A");
		funReplace(strLine,"</a>","</A>");
	}
	if(STR_SPACE ) 
	{
		funReplace(strLine," ",""); 
	}
	funReplace(strLine,"script","SCRIPT");
	funReplace(strLine,"style","STYLE");
}


//--------------------------------------------------------------------------------
// FUNCTION: 對strLine進行預處理。
// IN      : 一行。
// OUT     : 將結果保存在變量中。
// NOTE    : 
//--------------------------------------------------------------------------------
void Extract::funPreProcess(string& strLine)
{
	wchar_t ws[1024];
	char ss[2048];
	int nTrans = MultiByteToWideChar(CP_ACP, 0, strLine.c_str(), strLine.size(), ws, 1024 );
	ws[nTrans] =0;

	wstring wss=ws;

	funReplace(wss,L" ",L" ");        //將" "(全角的空格)替換成空格

	nTrans = WideCharToMultiByte(CP_ACP, 0, wss.c_str(), wss.size(), ss, 2048, NULL, NULL );
	ss[nTrans] = 0;
	strLine=ss;
}


//--------------------------------------------------------------------------------
// FUNCTION: 去除<>間的字符。
// IN      : strResult,以及分隔符。
// OUT     : 傳址
// CALL    : funDelete(strResult,"<TD"); 
// NOTE    : Eg:<TD style="FONT-SIZE: 24pt" width="100%"> 變為:<TD>
//--------------------------------------------------------------------------------
void Extract::funDelete(string& strResult,string separator)
{
	string strTemp1,strTemp2;
	int nPos1,nPos2;
	int n1,n2;
	nPos1 = strResult.find(separator);
	nPos2 = strResult.find(">",nPos1);
	if ((nPos1 == -1) || (nPos2 == -1)) return; //如果沒有<或>,直接退出。
	
	n1 = funCountSymbol(strResult,nPos1,nPos2,"<"); //n1、n2至少等于1
	n2 = funCountSymbol(strResult,nPos1,nPos2,">");

	while (n1 != n2)
	{
		nPos2 = strResult.find(">",nPos2+1);
		n1 = funCountSymbol(strResult,nPos1,nPos2,"<");
		n2 = funCountSymbol(strResult,nPos1,nPos2,">");
	}

	if(nPos2 == -1) return;                      //注意:如果找不到,要返回。

	strTemp1=strResult.substr(0,nPos1);
	strTemp2=strResult.substr(nPos2+1);
	
	funDelete(strTemp2,separator);
	strResult=strTemp1+separator+">"+strTemp2;
}

//--------------------------------------------------------------------------------
// FUNCTION: 返回位置i,j間的symbol個數。
// IN      : 
// OUT     : 
// CALL    : int n = funCountSymbol(strResult,4,19,"<"); 結果n=4
// NOTE    : Eg:<TD><A<B<BR>>BC</B>>DD</A></TD> 變為:<TD>
//               0123456789012345678901234567890  
//                         1         2         3
//--------------------------------------------------------------------------------
int Extract::funCountSymbol(string strResult,int i,int j,string symbol)
{
	int nPos;
	int nCount = 0 ;
	nPos = strResult.find(symbol,i);
	while((nPos != -1) && (nPos <= j))
	{
		nCount ++ ; 
		nPos = strResult.find(symbol,nPos+1);
	}
	return nCount ; 
}

//--------------------------------------------------------------------------------
// FUNCTION: 去除<><>間的字符。
// IN      : strResult,以及分隔符。
// OUT     : 傳址
// NOTE    : Eg:abc<SCRIPT language=JavaScript>……</SCRIPT>abc 變為:abcabc
// NOTE    : 存在嵌套的情況
//           abc<SCRIPT><SCRIPT>……</SCRIPT>……</SCRIPT>abc 變為:abcabc
//--------------------------------------------------------------------------------
void Extract::funDelete2(string& strResult,string separator,int nPos)
{
	string strTemp1,strTemp2;
	string sepa1 = "<"+separator ;
	string sepa2 = "</"+separator+">" ;
	int nPos1,nPos2;
	int n1,n2;
	
	nPos1=strResult.find(sepa1,nPos);
	nPos2=strResult.find(sepa2,nPos1);
	if ((nPos1 == -1) || (nPos2 == -1)) return; //如果沒有<或>,直接退出。

	n1 = funCountSymbol(strResult,nPos1,nPos2,sepa1);
	n2 = funCountSymbol(strResult,nPos1,nPos2+sepa2.length(),sepa2);

	while (n1 != n2)
	{
		nPos2 = strResult.find(sepa2,nPos2+1);
		n1 = funCountSymbol(strResult,nPos1,nPos2,sepa1);
		n2 = funCountSymbol(strResult,nPos1,nPos2+sepa2.length(),sepa2);
	}

	if(nPos2 == -1) return;                      //注意:如果找不到,要返回。

	strTemp1=strResult.substr(0,nPos1);
	strTemp2=strResult.substr(nPos2+sepa2.length());
	
	funDelete2(strTemp2,separator,0);
	strResult=strTemp1 + strTemp2 ;
}


//--------------------------------------------------------------------------------
// FUNCTION: 保留指定標簽之間的字符。
// IN      : strResult
// OUT     : strResult
// NOTE    : Eg:<HTML><TD><FONT>a<A>b</A>c</FONT></TD></HTML> 變為:<TD>a<A>bc
// NOTE    : Eg:<TABLE <BR>><TD>a</TD></TABLE> 變為:_a (_表示空格)
//--------------------------------------------------------------------------------
void Extract::funKeepListLabel(string& strResult,int nPosOld)
{
	//string strUseful = "<TITLE>,<TR>,<TD>,<P>,<BR>,<DIV>"; 
	string strTemp1,strTemp2;
	string sepa;
	int nPos,nPos1,nPos2;
	int n1,n2;

	nPos1 = strResult.find("<"); 
	nPos2 = strResult.find(">",nPos1); 

	while ((nPos1 != -1) && (nPos2 != -1)) {
		sepa=strResult.substr(nPos1,3); 
		nPos=strUseful.find(sepa); 
		n1 = funCountSymbol(strResult,nPos1,nPos2,"<");
		n2 = funCountSymbol(strResult,nPos1,nPos2,">");
		while (n1 != n2)
		{
			nPos2 = strResult.find(">",nPos2+1);
			n1 = funCountSymbol(strResult,nPos1,nPos2,"<");
			n2 = funCountSymbol(strResult,nPos1,nPos2,">");
		}
		if(nPos2 == -1)                  //<TITLE>博客園 - webcool</</TITLE>
		{
			nPos2 = strResult.find(">",nPos1); 
		}
		strTemp1 = strResult.substr(0,nPos1); 
		strTemp2 = strResult.substr(nPos2+1); 
		funDelSideSpace(strTemp1);
		funDelSideSpace(strTemp2);
		if ( nPos != -1 ) 
		{
			if (sepa == "<TD") strTemp1 += " " ;       
			//else if (sepa == "<DI") strTemp1 += " " ;  //遇div,回車
			else strTemp1 += "<BR" ; 
		}
		strResult = strTemp1+strTemp2;
		nPos1=strResult.find("<",strTemp1.length()); 
		nPos2=strResult.find(">",strTemp1.length()); 
	}	
}


//--------------------------------------------------------------------------------
// FUNCTION: 更改擴展名。
// IN      : 網頁文件(*.htm/html)。
// OUT     : 原文件名,擴展名為txt。
// NOTE    : 
//--------------------------------------------------------------------------------
void Extract::funDestFilename(const char* filename,char* sResultFile) 
{
	strcpy(sResultFile,filename);
	unsigned int nLen=strlen(filename);
	if (filename[strlen(filename)-1] == 'l')     //.html
	{
		strncpy(sResultFile+nLen-5,".txt",10);
	}
	else                                         //.htm  
	{
		strncpy(sResultFile+nLen-4,".txt",10);
	}	
	sResultFile[nLen+4]=0;
}

//--------------------------------------------------------------------------------
// FUNCTION: 將strLine中的字符串strOld用strNew替換。
// IN      : 輸入一行
// OUT     : 替換后的行
// NOTE    : 
//--------------------------------------------------------------------------------
void Extract::funReplace(string& strLine,string strOld,string strNew)
{
	int nPos=0;
	while ((nPos=strLine.find(strOld)) != -1) {
 		strLine=strLine.substr(0,nPos)+strNew+strLine.substr(nPos+strOld.length());
	}
}

//--------------------------------------------------------------------------------
// FUNCTION: 將strLine中的字符串strOld用strNew替換。重載函數,處理寬字符。
// IN      : 輸入一行
// OUT     : 替換后的行
// NOTE    : 
//--------------------------------------------------------------------------------
void Extract::funReplace(wstring& strLine,wstring strOld,wstring strNew)
{
	int nPos=0;
	while ((nPos=strLine.find(strOld)) != -1) {
 		strLine=strLine.substr(0,nPos)+strNew+strLine.substr(nPos+strOld.length());
	}
}

//--------------------------------------------------------------------------------
// FUNCTION: 去除strLine兩邊的空格。
// IN      : strLine
// OUT     : strLine
// NOTE    : 
//--------------------------------------------------------------------------------
void Extract::funDelSideSpace(string& strLine)
{
	int nPos;
	if (strLine.empty()) return;
	nPos=strLine.find_first_not_of(" ");
	if ( nPos == -1 ) {
		strLine = "";
		return;
	}
	strLine=strLine.substr(nPos);
	nPos=strLine.find_last_not_of(" ");
	strLine=strLine.substr(0,nPos+1);
}

//--------------------------------------------------------------------------------
// FUNCTION: 去除以&開頭以;結束的字符串。
// IN      : strResult
// OUT     : strResult
// NOTE    : 1."&nbsp;"-->" "   2."&lt;"-->"<"      3."&gt;"-->">"
//           4."&amp;"-->"&"    5."&quot;"-->"\"    6."&copy;"-->"(C)"
//           7."&reg;"-->"?"    8."&trade;"-->"TM"  9."&#8226;"-->"·"
//--------------------------------------------------------------------------------
void Extract::funDelBegAnd(string& strResult,int nPos) //從第nPos個位置開始
{
	//a&nbsp;&&nbsp;;;&nbsp;編輯
	string strTmp1,strTmp2;
	string strSymbol;
	int nPos1,nPos2;

	nPos1 = strResult.find("&",nPos);
	nPos2 = strResult.find(";",nPos1);
	while ((nPos1 != -1) || (nPos2 != -1)) 
	{
		strSymbol = strResult.substr(nPos1+1,nPos2-nPos1-1);
		if(strSymbol == "nbsp")       strSymbol = " ";
		else if(strSymbol == "lt")    strSymbol = "<";
		else if(strSymbol == "gt")    strSymbol = ">";
		else if(strSymbol == "amp")   strSymbol = "&";
		else if(strSymbol == "quot")  strSymbol = "\"";
		else if(strSymbol == "copy")  strSymbol = "(C)";
		else if(strSymbol == "reg")   strSymbol = "?";
		else if(strSymbol == "trade") strSymbol = "TM";
		else if(strSymbol == "#8226") strSymbol = "·";
		else if(strSymbol == "#149") strSymbol = "·";
		else
		{
			nPos1 = strResult.find("&",nPos1+1); //找下一個&
			nPos2 = strResult.find(";",nPos1);
			continue;
		}

		strTmp1 = strResult.substr(0,nPos1) ;
		strTmp2 = strResult.substr(nPos2 + 1) ;
		strResult = strTmp1 + strSymbol + strTmp2;
		
		nPos1 = strResult.find("&",strTmp1.length());
		nPos2 = strResult.find(";",nPos1);
	}	
}

//--------------------------------------------------------------------------------
// FUNCTION: 刪除無用鏈接(在<TR>和</TR>間除鏈接外,沒有其他內容)
// IN      : strResult
// OUT     : 傳址
// NOTE    : Eg:a<TR><TD><A>bc</A></TD></TR><TR><TD>d</TD></TR>e 變為:
//               a<TR><TD>d</TD></TR>e
//--------------------------------------------------------------------------------
void Extract::funDelUselessLink(string& strResult) 
{
	string strTmp1,strTmp2,strTmp3;
	int nPos1,nPos2;
	nPos1 = strResult.find("<TR");
	nPos2 = strResult.find("</TR>");
	while ((nPos1 != -1) && (nPos2 != -1)) {
		strTmp1 = strResult.substr(0,nPos1);
		strTmp2 = strResult.substr(nPos1,nPos2 - nPos1 + 5);
		strTmp3 = strResult.substr(nPos2 + 5);
		funDelete2(strTmp2,"A",0);               //刪除<A>與</A>間的內容
		funKeepListLabel(strTmp2,0);
		funReplace(strTmp2,"<BR","");
		funReplace(strTmp2," ","");
		if (strTmp2.empty())
		{
			strResult = strTmp1 + strTmp3 ; 
			nPos1 = strResult.find("<TR",strTmp1.length());
			nPos2 = strResult.find("</TR>",nPos1);
			continue;
		}

		nPos1 = strResult.find("<TR",nPos2 + 5);
		nPos2 = strResult.find("</TR>",nPos1);
	}
}

Extract::~Extract()
{

}

//替換\n \r字符
char * Extract::funReplaceReturnAndEnter(const char * szReslut)
{
	register int x ,y ;
	int len;
	unsigned char *str;

	len =strlen(szReslut);
	str = (unsigned char *) new char[ len + 1];
	

	if(str == NULL){
		return NULL;
	}

	for (x = 0 ,y =0; x < len ; x++  ) 
	{
		unsigned char szT = (unsigned char) szReslut[x];
		if (szT == 10 || szT == 13 )  
		{
			str[y] = ' ' ;
		}
		else if (szT >= 0xa1 )   
		{
			str[y] = ' ' ;
			
		}
		else if (szT == 0x20 )   
		{
			str[y] = ' ' ;
			
		}
		else if (szT == 'B' )   
		{
			str[y] = ' ' ;
			
		}
		else if (szT == 'R' )   
		{
			str[y] =  ' ' ;
			
		}
		else if (szT == '<' )  //把前面的兩個逗號去除 
		{
			if (y > 2)
			{
				str[y] = ',' ;
				y++ ;
			}
			else
				str[y] = ' ' ;
			 
		}
		else
		{
			str[y] = szT ;
			 y++ ;
		}
	}

	str[y] = '\0';
	return ((char *) str);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久| 成人国产电影网| 欧洲国内综合视频| 亚洲精品少妇30p| 国产日韩在线不卡| jiyouzz国产精品久久| 亚洲欧美激情一区二区| 91精品麻豆日日躁夜夜躁| 久久99蜜桃精品| 中文字幕精品一区二区三区精品| 一本久久a久久精品亚洲| 天天色天天操综合| 国产精品国产自产拍高清av王其| 欧美日韩亚洲综合在线| 国产成人高清视频| 人人狠狠综合久久亚洲| 国产精品成人免费精品自在线观看| 久久影院午夜论| 欧美日韩国产综合一区二区三区| 成人av午夜影院| 色美美综合视频| 免费成人av在线| 精品亚洲porn| 免费xxxx性欧美18vr| 国产主播一区二区| 日日夜夜免费精品| 亚洲一区二区三区四区不卡| 国产欧美精品一区aⅴ影院| 日韩美女精品在线| 欧美国产日产图区| 亚洲午夜久久久久久久久电影院| 国产片一区二区| 亚洲精品自拍动漫在线| 日本va欧美va精品| www.亚洲人| 777久久久精品| 国产亚洲精品aa午夜观看| 日韩欧美国产综合| 欧美美女黄视频| 欧美精品粉嫩高潮一区二区| 久久久久久久久久久99999| 日韩欧美国产一区二区三区| 国产精品日日摸夜夜摸av| 国产亚洲精品bt天堂精选| 亚洲一区二区三区四区中文字幕| 久久精品国产99国产精品| 91蜜桃在线免费视频| 91在线看国产| 91黄视频在线观看| 国产亚洲婷婷免费| 奇米色一区二区| 欧美综合亚洲图片综合区| 亚洲精品在线观看视频| 国产免费成人在线视频| 日本中文字幕一区二区视频| 免费看精品久久片| 欧美日韩另类国产亚洲欧美一级| 国产精品卡一卡二| 国产精品国产自产拍高清av王其| 精品一区免费av| ...av二区三区久久精品| 国产福利一区二区三区视频 | 奇米影视7777精品一区二区| 精品久久久久av影院| 视频一区视频二区在线观看| 日韩视频永久免费| 日韩精品一级中文字幕精品视频免费观看| 91精品免费在线| 成人97人人超碰人人99| 日韩福利视频网| 中文字幕不卡的av| 3atv一区二区三区| 久久先锋影音av| 日欧美一区二区| 911国产精品| 久久久久亚洲蜜桃| 东方欧美亚洲色图在线| 国产日韩欧美一区二区三区综合 | 免费成人在线网站| 日韩伦理免费电影| 精品粉嫩超白一线天av| 日本韩国欧美一区二区三区| 久久激五月天综合精品| 亚洲乱码中文字幕| 亚洲国产高清在线| 日韩女优毛片在线| 91福利小视频| 成人免费观看av| 国产欧美日韩亚州综合| 欧美乱妇15p| 91亚洲精品乱码久久久久久蜜桃| 久久av资源站| 天堂av在线一区| 亚洲精品国产成人久久av盗摄| 久久久久国产精品麻豆| 正在播放亚洲一区| 欧美在线视频日韩| 91影视在线播放| 北条麻妃国产九九精品视频| 久久99精品久久久久婷婷| 丝袜美腿亚洲一区二区图片| 亚洲精品中文在线影院| 国产精品久久久久7777按摩 | 欧美剧情电影在线观看完整版免费励志电影 | 蜜桃在线一区二区三区| 久久人人超碰精品| 精品久久人人做人人爱| 日韩欧美国产麻豆| 欧美大片在线观看| 日韩欧美成人激情| 欧美大肚乱孕交hd孕妇| 欧美高清激情brazzers| 欧美丝袜丝nylons| 国产在线看一区| 久草精品在线观看| 久久精品国产亚洲a| 久久99最新地址| 国产在线日韩欧美| 国产成人综合视频| 国产成人精品亚洲777人妖| 国产一区二区免费看| 亚洲精品乱码久久久久久日本蜜臀| 中文字幕第一区综合| 亚洲欧美怡红院| 亚洲美女免费在线| 亚洲国产日韩a在线播放性色| 亚洲一区二区成人在线观看| 亚洲 欧美综合在线网络| 日本一区二区免费在线| 欧美国产国产综合| 亚洲女人****多毛耸耸8| 亚洲成a人片在线不卡一二三区| 五月天精品一区二区三区| 日韩电影一二三区| 国产一区二区三区免费看 | 日韩专区中文字幕一区二区| 日欧美一区二区| 国产一区二区三区电影在线观看| 丰满放荡岳乱妇91ww| 色综合一个色综合| 成人国产亚洲欧美成人综合网| 99re成人精品视频| 欧美精选午夜久久久乱码6080| 日韩免费一区二区| 国产精品区一区二区三区| 亚洲国产视频直播| 国产一区二区毛片| 欧美优质美女网站| 精品免费国产二区三区| 中文字幕永久在线不卡| 日韩福利电影在线| 成人午夜激情视频| 7777精品伊人久久久大香线蕉超级流畅| 欧美成人三级电影在线| 亚洲人成网站色在线观看| 日本欧美一区二区三区乱码| 成人性生交大片免费| 欧美日韩精品一区二区三区四区 | 一区二区三区在线观看动漫| 99久久国产综合色|国产精品| 国产成人精品在线看| 成人深夜福利app| 国产91丝袜在线播放九色| 不卡高清视频专区| 91蜜桃免费观看视频| 91九色02白丝porn| 欧美狂野另类xxxxoooo| 日韩一区二区三区三四区视频在线观看| 欧美高清视频一二三区| 日韩午夜在线影院| 久久久久久久久久久电影| 国产精品久久久久久妇女6080| 亚洲日本一区二区| 婷婷中文字幕综合| 激情久久五月天| av一本久道久久综合久久鬼色| 日本精品一区二区三区四区的功能| 欧美午夜一区二区三区| 日韩欧美美女一区二区三区| 国产欧美日韩精品在线| 亚洲激情网站免费观看| 日韩精品福利网| 高清不卡一二三区| 91国偷自产一区二区使用方法| 欧美福利电影网| 国产欧美日韩综合精品一区二区| 亚洲精品v日韩精品| 捆绑变态av一区二区三区| av动漫一区二区| 日韩一本二本av| 1区2区3区欧美| 免费欧美日韩国产三级电影| 成人黄色片在线观看| 69精品人人人人| 1024国产精品| 精品中文av资源站在线观看| 99国产麻豆精品| 精品福利一区二区三区| 亚洲图片一区二区| 春色校园综合激情亚洲|