今天就跟大家聊聊有關(guān)VB.NET中怎么實(shí)現(xiàn)按文件名排序,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
為大同等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及大同網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、大同網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
輸入 : a1,a2,a10,a001
我們知道,如果按照字符串比較,結(jié)果應(yīng)該是 a001,a1,a10,a2,但我們期望的結(jié)果應(yīng)該是a001,a1,a2,a10.
自己寫了一個(gè)VB.NET文件名排序的算法,請(qǐng)參考,或者有更好的算法,請(qǐng)賜教
/* Return Value Description < 0 arg1 less than arg2 0 arg1 equivalent to arg2> 0 arg1 greater than arg2 */
int compare(const void* arg1,const
void* arg2){
if (NULL==arg1||NULL==arg2)
//address of itemreturn 0;
LPSTR lpText1 = *( TCHAR** )arg1;
//content of itemLPSTR lpText2 = *( TCHAR** )arg2;
//content of itemif (NULL==lpText1||NULL==lpText2)
return 0;
int nText1Len = _tcslen(lpText1);
int nText2Len = _tcslen(lpText2);
int nText1IndexHandled = 0;
int nText2IndexHandled = 0;
int nRet = 0;
for (;;)
{
if (nText1IndexHandled==nText1Len
||nText2IndexHandled==nText2Len)
//don't compare complete since
all are same, "ab","abc"{
TCHAR chOffset1 = nText1IndexHandled
<nText1Len?lpText1[nText1IndexHandled]:0;TCHAR chOffset2 = nText2IndexHandled
<nText2Len?lpText2[nText2IndexHandled]:0;nRet = (int)((WORD)chOffset1-
(WORD)chOffset2);break;
}
TCHAR ch2 = *(lpText1+nText1IndexHandled);
TCHAR ch3 = *(lpText2+nText2IndexHandled);
if (isdigit(ch2)&&isdigit(ch3))
// if digit, change to number and compare{
TCHAR* lpNum1 = new TCHAR[nText1Len];
TCHAR* lpNum2 = new TCHAR[nText2Len];
if (NULL==lpNum1||NULL==lpNum2)
return 0;
memset(lpNum1,0,nText1Len*sizeof(TCHAR));
memset(lpNum2,0,nText2Len*sizeof(TCHAR));
extractnumber(lpText1,nText1Len,
nText1IndexHandled,lpNum1);extractnumber(lpText2,nText2Len,
nText2IndexHandled,lpNum2);nRet = comparenumber(lpNum1,lpNum2);
delete[] lpNum1;
delete[] lpNum2;
}
else
{
nRet = (int)((WORD)ch2-(WORD)ch3);
nText1IndexHandled++;
nText2IndexHandled++;
}
if (nRet!=0)
break;
}
return nRet;
}
TCHAR* extractnumber(TCHAR* lpBuf,int
nLen,int& nIndexBegin,TCHAR* lpNumber){
if (NULL==lpBuf||NULL==lpNumber)
return lpNumber;
for (int i=nIndexBegin,nIndex=0;i
<nLen;++i,++nIndexBegin){
TCHAR ch = *(lpBuf+i);
if (!isdigit(ch))
break;
lpNumber[nIndex++]=ch;
}
return lpNumber;
}
int comparenumber(TCHAR* lpNumber1,
TCHAR* lpNumber2){
if (NULL==lpNumber1||NULL==lpNumber2)
return 0;
int nNum1Len = _tcslen(lpNumber1);
int nNum2Len = _tcslen(lpNumber2);
int nMaxLen = max(nNum1Len,nNum2Len);
TCHAR* lpFormatNum1 = new TCHAR[nMaxLen+1];
TCHAR* lpFormatNum2 = new TCHAR[nMaxLen+1];
if (NULL==lpFormatNum1||NULL==lpFormatNum2)
return 0;
memset(lpFormatNum1,_T('0'),
nMaxLen*sizeof(TCHAR));memset(lpFormatNum2,_T('0'),
nMaxLen*sizeof(TCHAR));lpFormatNum1[nMaxLen]=0;
lpFormatNum2[nMaxLen]=0;
int nPos = 0, nRet = 0;
int nIndex = nMaxLen-1;
for (nPos=nNum1Len-1;nPos>=0;--nPos)
lpFormatNum1[nIndex--]=lpNumber1[nPos];
nIndex = nMaxLen-1;
for (nPos=nNum2Len-1;nPos>=0;--nPos)
lpFormatNum2[nIndex--]=lpNumber2[nPos];
for (nPos=0;nPos<nMaxLen;++nPos)
{
nRet = lpFormatNum1[nPos]-lpFormatNum2[nPos];
if (nRet!=0)
break;
}
delete[] lpFormatNum1;
delete[] lpFormatNum2;
return nRet;
}
看完上述內(nèi)容,你們對(duì)VB.NET中怎么實(shí)現(xiàn)按文件名排序有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)頁標(biāo)題:VB.NET中怎么實(shí)現(xiàn)按文件名排序
文章源于:http://muchs.cn/article42/ghjihc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站維護(hù)、外貿(mào)建站、網(wǎng)站建設(shè)、建站公司、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)