本篇文章给大家分享的是有关VB.NET中怎么按文件名排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。VB.NET文件名排序案例:输入 : a1,a2,a10,a001 。我们
本篇文章给大家分享的是有关VB.NET中怎么按文件名排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
VB.NET文件名排序案例:
输入 : a1,a2,a10,a001 。我们知道,如果按照字符串比较,结果应该是 a001,a1,a10,a2,但我们期望的结果应该是a001,a1,a2,a10.
VB.NET code int compare(const void* arg1,const void* arg2) { if (NULL==arg1||NULL==arg2)//address of item return 0; LPSTR lpText1 = *( TCHAR** )arg1; //content of item LPSTR lpText2 = *( TCHAR** )arg2; //content of item if (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; }
以上就是VB.NET中怎么按文件名排序,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。
--结束END--
本文标题: VB.NET中怎么按文件名排序
本文链接: https://www.lsjlt.com/news/292966.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0