0

ファイルの変更日を取得し、それを人間が読める日付にフォーマットしたいと考えています。特定のファイルが最後に変更された日時に関する情報を取得する C プログラムを実行しています。私のCコードには、パイプで区切られた多数のegrep、awks、sedを含むシステムcmdが含まれています。sed や awk などを使用して、06 を 6 月に変換するにはどうすればよいですか (これは任意の月になる可能性があるため、配列または何かが必要です) 私が達成しようとしているのは、次のような文字列になることです。

私のCコードには以下が含まれています:

    char string1[100] = "";
    #define MAXCHAR 100
    FILE *fp;
    char str[MAXCHAR], str2[MAXCHAR];
    char* filename = "newfile";

    /*
    stat: run 'stat' on the dtlName file to display status information.
    egrep: search for the pattern 'Modify' and print the lines containing it.
    awk: Get columns 2 & 3
    sed: replace the . with a space, leaving 3 columns of output
    awk: only print cols 1 & 2 to newfile
    sed: replace '-' with ' ' in newfile
    awk: format output in newfile
    */
    sprintf(string1, "/bin/stat %s  \
                    | egrep Modify \
                    | /bin/awk '{print $2, $3}' \
                    | /bin/sed 's/\\./ /g' \
                    | /bin/awk '{print $1, $2}' \
                    | /bin/sed 's/-/ /g' \
                    | /bin/awk '{print $3,$2\", \"$1,\"at\",$4}' > newfile"
                    , dtlName);
    system(string1);
    fp = fopen(filename, "r");
    while (fgets(str, MAXCHAR, fp) != NULL)
            sprintf(str2,"%s", str);

    /*  Write information to file */
    DisplayReportFile (report);
    ReportEntry (report,L"Source file: %s, Created: %s\n\n",dtlName,str2);
4

5 に答える 5

1

同じプログラムの作業バージョンは次のとおりです。

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv)
{
        if (argc < 2) exit(1);

        char *filename = argv[1];

        struct stat st;
        char s[1000];
        if (stat(filename, &st))
                exit(2);

        struct tm *mdtime = localtime( &st.st_mtime );
        strftime(s, sizeof(s), "%D", mdtime);

        printf("%s\n", s);
}

その他の形式については、 strftimeを参照してください。

于 2013-07-03T11:02:56.227 に答える
0

役に立つかどうかはわかりませんが、一度そのようなことをしました。その文字列を取得している間、その文字列を処理して取得Monthした後、使用できます

if(strcmp(May,string1)==0)
return 5;

目的の出力を得ることができます。

于 2013-07-03T10:49:42.350 に答える
0

awk sed の組み合わせは必要ですか? ファイルに対して fstat を呼び出して、そこから変更日を抽出しないのはなぜですか? 次に、ctime() を呼び出して、これを文字列に変換できます。

于 2013-07-03T10:48:00.060 に答える