From 9581579b2b1ade19049171a4d1fec4c318d232b1 Mon Sep 17 00:00:00 2001 From: Thaddeus Hughes Date: Wed, 17 Sep 2025 22:43:09 -0500 Subject: [PATCH] prettified ui and other minor niceties --- LogAB(20).joined.csv | 8 ++--- LogAB(20).sequential.csv | 14 ++++---- main.py | 69 +++++++++++++++++----------------------- 3 files changed, 41 insertions(+), 50 deletions(-) diff --git a/LogAB(20).joined.csv b/LogAB(20).joined.csv index bbb688e..702a804 100644 --- a/LogAB(20).joined.csv +++ b/LogAB(20).joined.csv @@ -1,4 +1,4 @@ -gross_weight,gross_time,tare_weight,tare_time,net -0,06:12 PM 09/17/25,3780,06:13 PM 09/17/25,-3780 -3780,10:18 PM 09/17/25,3640,10:19 PM 09/17/25,140 -1640,10:19 PM 09/17/25,0,10:20 PM 09/17/25,1640 +GROSS_WEIGHT,GROSS_TIME,TARE_WEIGHT,TARE_TIME,NET +0,09/17/2025 06:12 PM,3780,09/17/2025 06:13 PM,-3780 +3780,09/17/2025 10:18 PM,3640,09/17/2025 10:19 PM,140 +1640,09/17/2025 10:19 PM,0,09/17/2025 10:20 PM,1640 diff --git a/LogAB(20).sequential.csv b/LogAB(20).sequential.csv index 8eac6f8..830be6b 100644 --- a/LogAB(20).sequential.csv +++ b/LogAB(20).sequential.csv @@ -1,7 +1,7 @@ -weight,timestamp -0,06:12 PM 09/17/25 -3780,06:13 PM 09/17/25 -3780,10:18 PM 09/17/25 -3640,10:19 PM 09/17/25 -1640,10:19 PM 09/17/25 -0,10:20 PM 09/17/25 +WEIGHT,TIMESTAMP +0,09/17/2025 06:12 PM +3780,09/17/2025 06:13 PM +3780,09/17/2025 10:18 PM +3640,09/17/2025 10:19 PM +1640,09/17/2025 10:19 PM +0,09/17/2025 10:20 PM diff --git a/main.py b/main.py index 6578853..62424da 100644 --- a/main.py +++ b/main.py @@ -3,6 +3,7 @@ import csv import tkinter as tk from tkinter import filedialog, messagebox import os +from datetime import datetime def parse_logs(log_text): lines = log_text.splitlines() @@ -20,12 +21,19 @@ def parse_logs(log_text): match = re.match(r'^GROSS\s+(\d+)\s*lb$', line) if match: weight = int(match.group(1)) - i += 2 + i += 2 # Skip to timestamp line if i < len(lines): ts_line = lines[i].strip() if re.match(r'^\d{2}:\d{2} (AM|PM) \d{2}/\d{2}/\d{2}$', ts_line): - pairs.append((weight, ts_line)) - i += 1 + # Convert timestamp to Excel-friendly 12-hour format + try: + dt = datetime.strptime(ts_line, '%I:%M %p %m/%d/%y') + excel_ts = dt.strftime('%m/%d/%Y %I:%M %p') + pairs.append((weight, excel_ts)) + except ValueError: + i += 1 + continue + i += 1 # Move to next weight entry else: i += 1 else: @@ -36,14 +44,14 @@ def parse_logs(log_text): def write_csv1(pairs, filename): with open(filename, 'w', newline='') as f: writer = csv.writer(f) - writer.writerow(['weight', 'timestamp']) + writer.writerow(['WEIGHT', 'TIMESTAMP']) for weight, timestamp in pairs: writer.writerow([weight, timestamp]) def write_csv2(pairs, filename): with open(filename, 'w', newline='') as f: writer = csv.writer(f) - writer.writerow(['gross_weight', 'gross_time', 'tare_weight', 'tare_time', 'net']) + writer.writerow(['GROSS_WEIGHT', 'GROSS_TIME', 'TARE_WEIGHT', 'TARE_TIME', 'NET']) for j in range(0, len(pairs), 2): if j + 1 < len(pairs): gross_weight, gross_time = pairs[j] @@ -55,60 +63,43 @@ def select_input_file(): filename = filedialog.askopenfilename(filetypes=[("Text files", "*.txt"), ("All files", "*.*")]) if filename: input_file_var.set(filename) - # Auto-populate output file names - base = os.path.splitext(filename)[0] - output_file1_var.set(f"{base}.sequential.csv") - output_file2_var.set(f"{base}.joined.csv") - -def select_output_file1(): - filename = filedialog.asksaveasfilename(defaultextension=".csv", filetypes=[("CSV files", "*.csv"), ("All files", "*.*")]) - if filename: - output_file1_var.set(filename) - -def select_output_file2(): - filename = filedialog.asksaveasfilename(defaultextension=".csv", filetypes=[("CSV files", "*.csv"), ("All files", "*.*")]) - if filename: - output_file2_var.set(filename) def process_files(): input_file = input_file_var.get() - output_file1 = output_file1_var.get() - output_file2 = output_file2_var.get() - if not input_file or not output_file1 or not output_file2: - messagebox.showerror("Error", "Please select all input and output files.") + if not input_file: + messagebox.showerror("Error", "Please select an input file.") return + # Auto-generate output filenames + base = os.path.splitext(input_file)[0] + output_file1 = f"{base}.sequential.csv" + output_file2 = f"{base}.joined.csv" + try: with open(input_file, 'r') as f: log_text = f.read() pairs = parse_logs(log_text) write_csv1(pairs, output_file1) write_csv2(pairs, output_file2) - messagebox.showinfo("Success", "CSV files generated successfully!") + messagebox.showinfo("Success", f"CSV files generated:\n{output_file1}\n{output_file2}") except Exception as e: messagebox.showerror("Error", f"An error occurred: {str(e)}") root = tk.Tk() root.title("Log to CSV Converter") -root.geometry("500x500") +root.geometry("500x120") input_file_var = tk.StringVar() -output_file1_var = tk.StringVar() -output_file2_var = tk.StringVar() -tk.Label(root, text="Select Input Log File:").pack(pady=5) -tk.Entry(root, textvariable=input_file_var, width=50).pack(pady=5) -tk.Button(root, text="Browse Input", command=select_input_file).pack(pady=5) +# Input file selection +input_frame = tk.Frame(root) +input_frame.pack(pady=5, padx=10, fill='x') +tk.Label(input_frame, text="Select Input Log File:").pack(side='left') +tk.Entry(input_frame, textvariable=input_file_var, width=40).pack(side='left', padx=5) +tk.Button(input_frame, text="Browse Input", command=select_input_file).pack(side='left') -tk.Label(root, text="Select Output CSV (Sequential):").pack(pady=5) -tk.Entry(root, textvariable=output_file1_var, width=50).pack(pady=5) -tk.Button(root, text="Browse Sequential Output", command=select_output_file1).pack(pady=5) - -tk.Label(root, text="Select Output CSV (Joined):").pack(pady=5) -tk.Entry(root, textvariable=output_file2_var, width=50).pack(pady=5) -tk.Button(root, text="Browse Joined Output", command=select_output_file2).pack(pady=5) - -tk.Button(root, text="Convert to CSV", command=process_files).pack(pady=20) +# Convert button +tk.Button(root, text="CONVERT TO CSV", command=process_files, font=("Arial", 14), relief="raised", bg="#4CAF50", fg="white").pack(pady=20, padx=10, fill='x') root.mainloop() \ No newline at end of file