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
tags
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.