slogan3

Help mij een Ruby-script te schrijven voor bestandsmanipulatie en verwerking

description

Met deze prompt kun je snel een Ruby-script ontwikkelen dat specifieke bestandsmanipulaties uitvoert, waardoor je handmatig werk automatiseert en efficiënter met bestanden kunt omgaan. Het script omvat foutafhandeling en logging, wat betrouwbaarheid en inzicht verhoogt. Dit is handiger dan algemene scripts omdat het precies is afgestemd op jouw bestanden en behoeften.

prompt

Schrijf een Ruby-script dat de volgende bestandsmanipulatie uitvoert: <beschrijf de gewenste bewerkingen, bijvoorbeeld het lezen, aanpassen of samenvoegen van bestanden> ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld Ruby-script dat meerdere CSV-bestanden samenvoegt, alleen de rijen met status 'actief' behoudt, en daarbij foutafhandeling en logging bevat: ```ruby require 'csv' require 'logger' # Configuratie input_files = ['bestand1.csv', 'bestand2.csv', 'bestand3.csv'] # Pas dit aan naar je bestandsnamen output_file = 'samengevoegd.csv' status_kolom = 'status' # Pas aan naar de juiste kolomnaam in je CSV-bestanden # Initialiseer logger logger = Logger.new('samenvoeg.log', 'daily') logger.level = Logger::INFO begin # Controleer of inputbestanden bestaan input_files.each do |file| unless File.exist?(file) logger.error("Bestand niet gevonden: #{file}") raise "Bestand niet gevonden: #{file}" end end # Open het outputbestand CSV.open(output_file, 'w', write_headers: true) do |csv_out| headers_set = false input_files.each do |file| logger.info("Verwerken van bestand: #{file}") begin CSV.foreach(file, headers: true) do |row| # Lees headers en voeg toe aan eerste bestand unless headers_set csv_out << row.headers headers_set = true logger.info("Headers vastgesteld: #{row.headers}") end # Filter op 'actief' in de status kolom if row[status_kolom]&.strip&.downcase == 'actief' csv_out << row end end rescue => e logger.error("Fout bij verwerken van #{file}: #{e.message}") # Ga door met volgende bestanden end end end logger.info("Samenvoegen voltooid. Uitvoergegevens opgeslagen in #{output_file}") rescue => e logger.fatal("Fatal error: #{e.message}") puts "Er is een fout opgetreden: #{e.message}" end ``` **Uitleg:** - Het script leest meerdere CSV-bestanden op, zoals aangegeven in `input_files`. - Het controleert of elk bestand bestaat en logt een fout als dat niet het geval is. - Het leest de CSV-bestanden regel voor regel, filtert alleen de rijen waar de kolom `status` de waarde `'actief'` heeft. - Alleen bij het eerste bestand worden de headers overgenomen. - Het resultaat wordt weggeschreven naar `samengevoegd.csv`. - Fouten tijdens het lezen van bestanden worden gelogd en het script gaat verder met de volgende bestanden. - Logging gebeurt naar een bestand `samenvoeg.log` en wordt gedetailleerd bijgehouden. Pas de bestandsnamen en de naam van de status-kolom aan indien nodig.
provider: deepseek
model: deepseek-chat
Hier is een efficiënt Ruby-script voor het samenvoegen van CSV-bestanden met actieve rijen: ```ruby require 'csv' require 'logger' class CSVCombiner def initialize @logger = Logger.new($stdout) @logger.level = Logger::INFO @combined_data = [] @headers = nil end def combine_csv_files(input_pattern, output_file) begin # Zoek alle CSV-bestanden die matchen met het input pattern input_files = Dir.glob(input_pattern) if input_files.empty? @logger.error("Geen CSV-bestanden gevonden met pattern: #{input_pattern}") return false end @logger.info("Gevonden #{input_files.size} CSV-bestand(en)") input_files.each do |file| process_file(file) end write_output(output_file) @logger.info("Succesvol samengevoegd. #{@combined_data.size} actieve rijen geschreven naar #{output_file}") true rescue StandardError => e @logger.error("Fout opgetreden: #{e.message}") @logger.error(e.backtrace.join("\n")) false end end private def process_file(file) @logger.info("Verwerken: #{file}") CSV.foreach(file, headers: true, encoding: 'bom|utf-8') do |row| # Controleer of de rij status 'actief' heeft (case-insensitive) if row['status']&.downcase == 'actief' @headers ||= row.headers @combined_data << row end end rescue CSV::MalformedCSVError => e @logger.warn("Ongeldig CSV-formaat in #{file}: #{e.message}") rescue Errno::ENOENT @logger.warn("Bestand niet gevonden: #{file}") end def write_output(output_file) CSV.open(output_file, 'w', write_headers: true, headers: @headers) do |csv| @combined_data.each { |row| csv << row } end end end # Gebruik van het script if __FILE__ == $0 combiner = CSVCombiner.new # Voorbeeld gebruik: combineer alle CSV-bestanden in de huidige directory success = combiner.combine_csv_files('*.csv', 'gecombineerd_resultaat.csv') if success puts "Script succesvol voltooid" exit 0 else puts "Script mislukt" exit 1 end end ``` **Bestandstypen en formaten:** - **Input**: CSV-bestanden (Comma Separated Values) - **Output**: CSV-bestand met dezelfde structuur **Kenmerken van dit script:** - ✅ **Efficiënt**: Verwerkt bestanden regel voor regel (geheugenvriendelijk) - ✅ **Foutafhandeling**: Vangt CSV-fouten, ontbrekende bestanden en andere exceptions - ✅ **Logging**: Duidelijke logging naar stdout met verschillende niveaus - ✅ **Case-insensitive**: Herkent 'actief', 'ACTIEF', 'Actief', etc. - ✅ **UTF-8 ondersteuning**: Handelt BOM (Byte Order Mark) correct af - ✅ **Headers behouden**: Behoudt de originele kolomkoppen **Gebruik:** ```bash ruby script.rb # of specifieke bestanden: # combiner.combine_csv_files('input_*.csv', 'output.csv') ``` Het script verwacht dat alle CSV-bestanden dezelfde kolomstructuur hebben en een 'status' kolom bevatten.