| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 980 人关注过本帖
标题:求教档案时间排序问题
只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:20 回复次数:11 
求教档案时间排序问题
算法网上到处都有~只是有个小问题~

GHK156.1_11_130723135607.txt
GHK156.1_11_130723135477.txt
GHK156.1_11_130723125407.txt
GHK156.1_11_130723134407.txt
GHK156.1_11_130722135407.txt

要撷取档名后面带的时间记录排序~
但是C没有可储存12位整数的型态~
搜索更多相关主题的帖子: 记录 网上 
2013-07-31 12:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
字符串排序,与数值排序的结果是一样的。

授人以渔,不授人以鱼。
2013-07-31 12:29
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:7 
但是C没有可储存12位整数的型态~
------ 你老师跟你讲的?C中的标准内建类型 unsigned long long 最大可以表示 18446744073709551615,一共20位了。(当然,C标准没有说unsigned long long必须达到8字节)

即使不用 uint64_t 等类型,你也可以将之拆分成两个6位的数字再存储和比较
即使嫌拆分太麻烦,你可以用字符串方式存储,用strcpy方式比较。
2013-07-31 12:32
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
我昨天查的32位编译器没有超过4个字节的型态~
某些特殊C编译器是有~但是不是我用的那种~
我的构想是取出字元转ASCII码去比大小~
只是代码有问题会当机~帮忙看看为何~
用编译器跑时都正常~但是用执行档跑就会当~

unsigned long GetFileList(char *Feature,char *Path)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFindFile;
    BOOL bFind;
    DWORD dwFileAttributes;
    INT nTotalChildDirectory;
    char FPath[Max_Size]={0},strFileName[Max_Size]={0};
    unsigned long FSize=0;
   
    lstrcpy(FPath,Path);
    int len = lstrlen(FPath);

    if(FPath[len - 1] != '\\')
    lstrcat(FPath, "\\");

    lstrcat(FPath,Feature);
    lstrcat(FPath, "*.txt");

    nTotalChildDirectory = 0;
    bFind = TRUE;
    dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;

    hFindFile = FindFirstFile(FPath, &FindFileData);

    while(bFind && (hFindFile != INVALID_HANDLE_VALUE))
    {
    if((FindFileData.dwFileAttributes & dwFileAttributes) == dwFileAttributes)
    {
        lstrcat(strFileName, FindFileData.cFileName);
        nTotalChildDirectory++;
    }
    else
    {
        lstrcat(FileList[FileCount], FindFileData.cFileName);
        FileCount++;                                            
        FSize=FSize+FindFileData.nFileSizeLow;
    }
    bFind = FindNextFile(hFindFile, &FindFileData);
    }
    if(hFindFile != INVALID_HANDLE_VALUE) FindClose(hFindFile);
   
    if (FileCount>1){BubbleSort(FileCount);}//*********

    return FSize;
}

void BubbleSort(unsigned int FCount)
{
    unsigned int i=0,j=0,k=0;
    char temp[Max_Size]={0};

    for(i=0;i<FCount;i++)
    {
        for(j=i+1;j<FCount-1;j++)
    {
        for(k=0;k<strlen("GHK156.1_11_130723130821.txt");k++)
        {
            char A[1]={0},B[1]={0};
            int AA=0,BB=0;

            substr(A,FileList[j],k,1);
            AA=*A;
            substr(B,FileList[i],k,1);
            BB=*B;

            if(AA!=BB)
            {
                if(AA<BB)
                {
                    strcpy(temp,FileList[j]);
                    memset(FileList[j],0,sizeof(FileList[j]));
                    strcpy(FileList[j],FileList[i]);
                    strcpy(FileList[i],temp);
                    memset(temp,0,sizeof(temp));
                }
                break;
            }
        }
        }
    }
}
void substr(char *dest, const char* src, unsigned int start, unsigned int cnt)
{
    strncpy(dest, src + start, cnt);
    dest[cnt] = 0;
}

[ 本帖最后由 wube 于 2013-7-31 13:48 编辑 ]

不要選我當版主
2013-07-31 13:35
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
有些没声明到的是全局变量~

之前试过在同系统下(XP)~抓出的档案列表不用排序~
就已经是照顺序的~
但是程式放到其他版本系统中(2000)跑就不一定~
所以要做排序的动作~
难点是同系统下无法制造没排序过的情况~
来验证代码~

不要選我當版主
2013-07-31 13:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 4楼 wube
我昨天查的32位编译器没有超过4个字节的型态~
某些特殊C编译器是有~但是不是我用的那种~

------ unsigned long long 是C/C++标准的内建类型,也就是说任何C/C++编译器都应该支持这种类型,不支持的才属于“某些特殊C编译器”。
当然,如果你用的编译器过于老旧,不支持很正常。最早的C编译器连char、double等类型都不支持,但你不能说C语言中没有char等类型,也不能说现在支持char类型的编译器属于“某些特殊C编译器”。
2013-07-31 13:47
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
Deleting intermediate files and output files for project 'AAA - Win32 Debug'.
--------------------Configuration: AAA - Win32 Debug--------------------
Compiling...
StdAfx.cpp
Compiling...
AAA.cpp
c:\tmb\i5000\vc6\AAA\AAA.h(258) : error C2632: 'long' followed by 'long' is illegal
Error executing cl.exe.
Creating browse info file...

AAA.exe - 1 error(s), 0 warning(s)

不要選我當版主
2013-07-31 13:52
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
VC6应该不算特殊吧~
如果 unsigned long long 能用我也省得麻烦~
但是事不如人意~
只能另外想办法~

不要選我當版主
2013-07-31 13:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
vc60  不支持 long long

DO IT YOURSELF !
2013-07-31 14:24
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
也可以转成UNIX时间去比大小

不要選我當版主
2013-07-31 14:24
快速回复:求教档案时间排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016028 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved