请用c语言重写以下python37代码: import pandas as pd import os from os import path import re import sys qyl = pdSeries通川 达川 宣汉 开江 大竹 渠县 万源 name=区域 ybb = pdDataFrameqylname qyl tczs = intinput通川卡口考核数: dczs = i
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> #include <ctype.h> #include <stdbool.h>
typedef struct { char* name; int* data; int length; } series;
typedef struct { series* columns; int n_columns; int n_rows; } dataframe;
series* create_series(char* name, int length) { series* s = (series*) malloc(sizeof(series)); s->name = name; s->length = length; s->data = (int*) calloc(length, sizeof(int)); return s; }
dataframe* create_dataframe(series* columns, int n_columns, int n_rows) { dataframe* df = (dataframe*) malloc(sizeof(dataframe)); df->columns = columns; df->n_columns = n_columns; df->n_rows = n_rows; return df; }
void set_value(dataframe* df, int row, int col, int value) { df->columns[col].data[row] = value; }
int get_value(dataframe* df, int row, int col) { return df->columns[col].data[row]; }
void free_dataframe(dataframe* df) { for (int i = 0; i < df->n_columns; i++) { free(df->columns[i].name); free(df->columns[i].data); } free(df->columns); free(df); }
bool is_alpha(char* str) { for (int i = 0; str[i] != '\0'; i++) { if (!isalpha(str[i])) { return false; } } return true; }
void ps(char* url, dataframe* ybb, int tczs, int dczs, int xhzs, int kjzs, int dzzs, int qxzs, int wyzs) { DIR* dir = opendir(url); if (dir == NULL) { return; } struct dirent* dp; while ((dp = readdir(dir)) != NULL) { if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0) { continue; } char path[1024]; sprintf(path, "%s/%s", url, dp->d_name); if (dp->d_type == DT_DIR) { ps(path, ybb, tczs, dczs, xhzs, kjzs, dzzs, qxzs, wyzs); } else if (dp->d_type == DT_REG) { char* filename = dp->d_name; char* file_ext = strrchr(filename, '.'); if (file_ext == NULL || strcmp(file_ext, ".xls") != 0) { continue; } char* date_str = strtok(filename + 10, "_"); if (date_str == NULL) { continue; } int year = atoi(date_str); int month = atoi(date_str + 4); int day = atoi(date_str + 6); char date[16]; sprintf(date, "%04d-%02d-%02d", year, month, day); char file_path[1024]; sprintf(file_path, "%s/%s", url, filename); FILE* fp = fopen(file_path, "r"); if (fp == NULL) { continue; } dataframe* df = create_dataframe((series[]) { { "区域", NULL, 0 }, { "点位名称", NULL, 0 } }, 2, 0); char line[1024]; fgets(line, sizeof(line), fp); while (fgets(line, sizeof(line), fp) != NULL) { char* qy = strtok(line, "\t"); char* dwmc = strtok(NULL, "\t"); if (qy == NULL || dwmc == NULL) { continue; } int qy_len = strlen(qy); if (qy_len < 6) { continue; } qy[6] = '\0'; if (strcmp(qy, "511702") == 0 && !is_alpha(dwmc)) { set_value(df, df->n_rows, 0, 0); } else if (strcmp(qy, "511703") == 0 && !is_alpha(dwmc)) { set_value(df, df->n_rows, 0, 1); } else if (strcmp(qy, "511722") == 0) { if (!is_alpha(dwmc) || strncmp(dwmc, "LT", 2) == 0) { set_value(df, df->n_rows, 0, 2); } } else if (strcmp(qy, "511723") == 0 && !is_alpha(dwmc)) { set_value(df, df->n_rows, 0, 3); } else if (strcmp(qy, "511724") == 0) { set_value(df, df->n_rows, 0, 4); } else if (strcmp(qy, "511725") == 0) { set_value(df, df->n_rows, 0, 5); } else if (strcmp(qy, "511781") == 0 && !is_alpha(dwmc)) { set_value(df, df->n_rows, 0, 6); } set_value(df, df->n_rows, 1, atoi(dp->d_name + 10)); df->n_rows++; } fclose(fp); int tc = 0, dc = 0, xh = 0, kj = 0, dz = 0, qx = 0, wy = 0; for (int i = 0; i < df->n_rows; i++) { int qy = get_value(df, i, 0); int dwmc = get_value(df, i, 1); if (qy == 0) { tc++; } else if (qy == 1) { dc++; } else if (qy == 2) { xh++; } else if (qy == 3) { kj++; } else if (qy == 4) { dz++; } else if (qy == 5) { qx++; } else if (qy == 6) { wy++; } } double tczx = (tczs - tc) / (double) tczs; double dczx = (dczs - dc) / (double) dczs; double xhzx = (xhzs - xh) / (double) xhzs; double kjzx = (kjzs - kj) / (double) kjzs; double dzzx = (dzzs - dz) / (double) dzzs; double qxzx = (qxzs - qx) / (double) qxzs; double wyzx = (wyzs - wy) / (double) wyzs; set_value(ybb, 0, 0, tczx); set_value(ybb, 0, 1, dczx); set_value(ybb, 0, 2, xhzx); set_value(ybb, 0, 3, kjzx); set_value(ybb, 0, 4, dzzx); set_value(ybb, 0, 5, qxzx); set_value(ybb, 0, 6, wyzx); free_dataframe(df); } } closedir(dir); }
int main() { series* qyl = create_series("区域", 7); qyl->data[0] = "通川"; qyl->data[1] = "达川"; qyl->data[2] = "宣汉"; qyl->data[3] = "开江"; qyl->data[4] = "大竹"; qyl->data[5] = "渠县"; qyl->data[6] = "万源"; dataframe* ybb = create_dataframe(qyl, 7, 1); int tczs, dczs, xhzs, kjzs, dzzs, qxzs, wyzs; printf("通川卡口考核数:"); scanf("%d", &tczs); printf("达川卡口考核数:"); scanf("%d", &dczs); printf("宣汉卡口考核数:"); scanf("%d", &xhzs); printf("开江卡口考核数:"); scanf("%d", &kjzs); printf("大竹卡口考核数:"); scanf("%d", &dzzs); printf("渠县卡口考核数:"); scanf("%d", &qxzs); printf("万源卡口考核数:"); scanf("%d", &wyzs); char lj[1024]; printf("请输入日报文件夹路径:"); scanf("%s", lj); ps(lj, ybb, tczs, dczs, xhzs, kjzs, dzzs, qxzs, wyzs); FILE* fp = fopen("点位在线率.xlsx", "w"); fprintf(fp, "区域\t在线率\n"); for (int i = 0; i < ybb->n_columns; i++) { fprintf(fp, "%s\t%.2f%%\n", ybb->columns[i].name, ybb->columns[i].data[0] * 100); } fclose(fp); free_dataframe(ybb); return 0; }
原文地址: https://www.cveoy.top/t/topic/bq16 著作权归作者所有。请勿转载和采集!