开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 458|回复: 11
收起左侧

[易语言] 大佬,路上朋友给个要求,我没电脑,帮忙给个合适代码!

[复制链接]
结帖率:84% (57/68)
发表于 2024-9-8 13:09:27 | 显示全部楼层 |阅读模式   浙江省杭州市
11精币
假设aaa目录下有如下文件,每两个文件为一组(*-1.log,*-2.log),我要获取这个文件列表,并按文件名中日期排序,并且输出完整不完整(是否缺少*-1.log,*-2.log)

drive-240420-HD1-1.log
drive-240420-HD1-2.log

drive-240325-HD1-1.log
drive-240325-HD1-2.log

drive-240124-HD1-1.log
drive-240124-HD1-2.log

drive-240320-HD1-1.log
drive-240320-HD1-2.log

drive-240620-HD1-1.log
drive-240620-HD1-2.log

drive-240520-HD1-1.log
drive-240520-HD1-2.log

不完整,缺少-1
drive-230910-HD1-2.log

不完整,缺少-2
drive-220820-HD1-1.log


drive-240718-HD1-1.log
drive-240718-HD1-2.log

我需要的列表输出:
序号   日期              相关文件名       相关文件大小      是否完整     备注
1       240718     drive-240420-HD1-1.log|drive-240420-HD1-2.log  1234|2345 真
2       240620     drive-240620-HD1-1.log|drive-240620-HD1-2.log  1235|2346 真
。。。
8       230910     |drive-230910-HD1-2.log            0|2345      假      缺少drive-230910-HD1-1.log文件
9       220820     drive-220820-HD1-1.log|            2345|0      假      缺少drive-220820-HD1-2.log文件

请问大佬,这个逻辑步骤该怎么写比较合理?
我的想法是先设个自定义结构-drivelog(日期,文件1,文件2,完整,备注)
然后搜索aaa目录,回调出目录文件(然后填入自定义结构-drivelog)
最后排序?现在不在电脑旁,手机边想边打的。。。
谢谢帮忙,实现下!

点评

花小钱,办大事   福建省泉州市  发表于 2024-9-8 13:35

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:93% (241/258)

签到天数: 30 天

发表于 2024-9-8 13:26:07 | 显示全部楼层   湖南省郴州市
你说的这个朋友是不是你自己?

点评

兄弟,你纠结这个干嘛,速度帮忙啊   浙江省杭州市  发表于 2024-9-8 13:35
回复

使用道具 举报

结帖率:90% (18/20)
发表于 2024-9-8 13:37:10 | 显示全部楼层   福建省泉州市
[Python] 纯文本查看 复制代码
import os

def get_drive_log_list(directory):
    # 初始化字典来存储日期为键,值为包含文件1、文件2的列表
    logs = {}
    
    # 遍历目录获取所有文件
    for file_name in os.listdir(directory):
        if file_name.endswith(".log"):
            # 提取日期部分(假设格式是 'drive-日期-其它-1.log' 或 'drive-日期-其它-2.log')
            parts = file_name.split('-')
            date = parts[1]  # 提取日期部分
            file_type = parts[-1].split('.')[0]  # 提取-1或-2

            # 初始化日期的条目,如果还不存在
            if date not in logs:
                logs[date] = {'file1': None, 'file2': None}

            # 根据文件类型填充对应的条目
            if file_type == '1':
                logs[date]['file1'] = file_name
            elif file_type == '2':
                logs[date]['file2'] = file_name

    # 构建输出列表
    drive_log_list = []
    for index, (date, files) in enumerate(sorted(logs.items(), reverse=True), 1):
        file1 = files['file1'] if files['file1'] else ''
        file2 = files['file2'] if files['file2'] else ''
        
        # 获取文件大小(如果文件存在)
        file1_size = os.path.getsize(os.path.join(directory, file1)) if file1 else 0
        file2_size = os.path.getsize(os.path.join(directory, file2)) if file2 else 0
        
        # 判断是否完整
        is_complete = '真' if files['file1'] and files['file2'] else '假'
        note = ''
        if not files['file1']:
            note = f"缺少{date}-1.log文件"
        elif not files['file2']:
            note = f"缺少{date}-2.log文件"

        # 添加到输出列表
        drive_log_list.append({
            '序号': index,
            '日期': date,
            '相关文件名': f"{file1}|{file2}",
            '相关文件大小': f"{file1_size}|{file2_size}",
            '是否完整': is_complete,
            '备注': note
        })

    return drive_log_list

def print_drive_log_list(drive_log_list):
    # 打印表头
    print(f"{'序号':<6}{'日期':<10}{'相关文件名':<50}{'相关文件大小':<20}{'是否完整':<10}{'备注':<30}")
    for log in drive_log_list:
        print(f"{log['序号']:<6}{log['日期']:<10}{log['相关文件名']:<50}{log['相关文件大小']:<20}{log['是否完整']:<10}{log['备注']:<30}")

# 示例使用
directory_path = "aaa"  # 假设文件在 'aaa' 目录下
drive_log_list = get_drive_log_list(directory_path)
print_drive_log_list(drive_log_list)

点评

我是小白。。。帮忙啊   浙江省嘉兴市  发表于 2024-9-8 14:51
麻烦使用易语言。。。大佬是考研我朋友py啊。。。告诉你我不会。。。我要回复朋友的。。。   浙江省嘉兴市  发表于 2024-9-8 14:48

评分

参与人数 1好评 +1 精币 +1 收起 理由
企鹅号525150138 + 1 + 1 奉上小小红包希望笑纳

查看全部评分

回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 25 天

发表于 2024-9-8 14:01:55 | 显示全部楼层   山东省潍坊市
这不得来瓶红牛
回复

使用道具 举报

结帖率:97% (32/33)
发表于 2024-9-8 15:56:24 | 显示全部楼层   泰国
[C++] 纯文本查看 复制代码
#include <iostream>
#include <filesystem>
#include <vector>
#include <string>
#include <regex>
#include <fstream>
#include <iomanip>
#include <algorithm>

namespace fs = std::filesystem;

// 自定义结构体
struct DriveLog {
    std::string date;
    std::string file1;
    std::string file2;
    std::uintmax_t size1;
    std::uintmax_t size2;
    bool complete;
    std::string remark;

    // 输出格式
    friend std::ostream& operator<<(std::ostream& os, const DriveLog& log) {
        os << std::left << std::setw(10) << log.date
           << std::setw(50) << (log.file1 + "|" + log.file2)
           << std::setw(10) << (std::to_string(log.size1) + "|" + std::to_string(log.size2))
           << std::setw(10) << (log.complete ? "真" : "假")
           << log.remark;
        return os;
    }
};

// 获取文件大小
std::uintmax_t getFileSize(const std::string& path) {
    return fs::exists(path) ? fs::file_size(path) : 0;
}

// 解析文件并填充 DriveLog
std::vector<DriveLog> parseLogs(const std::string& directory) {
    std::vector<DriveLog> logs;
    std::regex logPattern(R"(drive-(\d{6})-HD1-(\d)\.log)");
    std::map<std::string, DriveLog> logMap;

    for (const auto& entry : fs::directory_iterator(directory)) {
        if (entry.is_regular_file()) {
            std::string filename = entry.path().filename().string();
            std::smatch match;
            if (std::regex_match(filename, match, logPattern)) {
                std::string date = match[1];
                int fileType = std::stoi(match[2]);

                if (logMap.find(date) == logMap.end()) {
                    logMap[date] = {date, "", "", 0, 0, true, ""};
                }

                if (fileType == 1) {
                    logMap[date].file1 = filename;
                    logMap[date].size1 = getFileSize(entry.path().string());
                } else if (fileType == 2) {
                    logMap[date].file2 = filename;
                    logMap[date].size2 = getFileSize(entry.path().string());
                }
            }
        }
    }

    // 检查完整性并生成备注
    for (auto& [date, log] : logMap) {
        if (log.file1.empty()) {
            log.complete = false;
            log.remark = "缺少drive-" + date + "-HD1-1.log文件";
        } 
        if (log.file2.empty()) {
            log.complete = false;
            log.remark += (log.remark.empty() ? "" : " | ") + "缺少drive-" + date + "-HD1-2.log文件";
        }
        logs.push_back(log);
    }

    // 按日期排序
    std::sort(logs.begin(), logs.end(), [](const DriveLog& a, const DriveLog& b) {
        return a.date > b.date;
    });

    return logs;
}

int main() {
    std::string directory = "aaa";  // 你的目录
    std::vector<DriveLog> logs = parseLogs(directory);

    // 输出表头
    std::cout << std::left << std::setw(5) << "序号"
              << std::setw(10) << "日期"
              << std::setw(50) << "相关文件名"
              << std::setw(10) << "相关文件大小"
              << std::setw(10) << "是否完整"
              << "备注" << std::endl;

    // 输出每一行
    int index = 1;
    for (const auto& log : logs) {
        std::cout << std::setw(5) << index++ << log << std::endl;
    }

    return 0;
}

点评

哎,都欺负人。。。   浙江省嘉兴市  发表于 2024-9-8 16:00
回复

使用道具 举报

结帖率:83% (10/12)

签到天数: 6 天

发表于 2024-9-9 00:09:03 | 显示全部楼层   江苏省苏州市
回复

使用道具 举报

结帖率:84% (57/68)

签到天数: 8 天

 楼主| 发表于 2024-9-27 14:47:27 | 显示全部楼层   浙江省杭州市
已自己解决!谢谢各位大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表