Läsa och skriva filer i Ruby

Hur man läser och skriver filer i Ruby (med exempel)

Ruby erbjuder enkla, eleganta och kraftfulla sätt att läsa från och skriva till filer. Språket lägger stor vikt vid läsbarhet och utvecklarvänlighet, vilket gör fil-I/O-operationer enkla och smidiga. Den här guiden behandlar de vanligaste och mest typiska metoderna med praktiska exempel.

Grundläggande begrepp

I Ruby utförs filhantering vanligtvis med hjälp av Fil klassen eller den kortare File.open metod. De flesta filåtgärder använder block för att säkerställa att filer stängs ordentligt efter användning, vilket förhindrar resursläckor.

Öppna en fil

Det rekommenderade sättet är att använda ett blockformulär:

ruby
File.open("filnamn.txt", "r") do |fil|
  # arbetar med filen
slutet
#-filen stängs automatiskt här

Om det inte finns något block måste du stänga filen manuellt:

ruby
file = File.open("filename.txt", "r")
# ... drift ...
file.close

Fillägen

Det andra argumentet till File.open är den läge sträng:

LägeBetydelse
“r”Skrivskyddad (standard)
“w”Endast skrivåtkomst, skapar/trunkerar filen
“a”Skrivskyddad, lägger till data i filen
“r+”Läser och skriver, bevarar innehållet
“w+”Läser och skriver, trunkerar filen
“a+”Läs och skriv, lägg till

Lägg till “b” för binärt läge i Windows (t.ex. “rb”, “wb”).

Läsa in filer i Ruby

1. Läs hela filen som en sträng

ruby
content = File.read("example.txt")
puts content

Eller genom att använda File.open:

ruby
content = File.open("example.txt", "r") { |f| f.read }

2. Läs in hela filen i en array med rader

ruby
lines = File.readlines("example.txt")
lines.each { |line| puts line }

# Eller mer idiomatiskt uttryckt:
File.readlines("example.txt").each do |line|
  puts "Rad: #{line.chomp}"
end

3. Läs rad för rad (mest minneseffektivt)

Perfekt för stora filer:

ruby
File.open("large_file.txt", "r") do |file|
  file.each_line do |line|
    puts line.chomp.upcase
  end
end

Eller genom att använda den kortare foreach:

ruby
File.foreach("large_file.txt") do |line|
  process(line.chomp)
end

4. Läs ett visst antal byte eller rader

ruby
File.open("data.bin", "rb") do |f|
  header = f.read(16)      # läser de första 16 byten
  sätter rubrik
slut

# Läs de första 5 raderna
first_five = File.foreach("log.txt").first(5)

5. Läs med angiven kodning

ruby
content = File.read("utf8_file.txt", encoding: "UTF-8")
# eller
File.open("file.txt", "r:UTF-8") do |f|
  f.each_line { |line| puts line }
end

Skriva till filer i Ruby

1. Skriva en sträng till en fil (överskriver)

ruby
File.write("output.txt", "Hej, Ruby!\nDet här är en ny fil.")

Det här är det enklaste och vanligaste sättet.

2. Skriv med hjälp av File.open (blockform)

ruby
File.open("greeting.txt", "w") do |file|
  file.puts "Hello World"
  file.puts "Välkommen till Ruby-fil-I/O"
  file.write "Denna rad skrivs utan radbrytning"
  file << " << Här används shovel-operatorn\n"
end

Metoder som finns tillgängliga inom blocket:

  • sätter – lägger till en radbrytning
  • skriv ut – ingen radbrytning
  • skriva – ingen radbrytning (alias för <<)
  • << – grävmaskinist

3. Lägg till i en fil

ruby
File.open("log.txt", "a") do |file|
  file.puts "#{Time.now}: Programmet startades"
end

# Eller kortare:
File.write("log.txt", "Ny loggpost\n", mode: "a")

4. Skriv en radmatris

ruby
lines = ["Första raden", "Andra raden", "Tredje raden"]

File.open("lines.txt", "w") do |file|
  lines.each { |line| file.puts line }
end

# Eller ännu kortare:
File.write("lines.txt", lines.join("\n") + "\n")

Praktiska exempel

Exempel 1: Kopiera en fil
ruby
def copy_file(källa, mål)
  File.write(mål, File.read(källa))
end

copy_file("källa.txt", "backup.txt")

Eller i binärläge:

ruby
File.write("backup.bin", File.read("original.bin", mode: "rb"), mode: "wb")
Exempel 2: Enkel CSV-skrivare
ruby
data = [
  ["Namn", "Ålder", "Stad"],
  ["Alice", 30, "New York"],
  ["Bob", 25, "London"]
]

File.open("people.csv", "w") do |file|
  data.each do |row|
    file.puts row.join(",")
  end
end
Exempel 3: Enkel CSV-läsare
ruby
File.foreach("people.csv") do |line|
  name, age, city = line.chomp.split(",")
  puts "#{name} är #{age} år gammal och bor i #{city}"
end
Exempel 4: Räkna rader i en fil
ruby
line_count = File.foreach("large.txt").inject(0) { |count, _| count + 1 }
puts "Totalt antal rader: #{line_count}"

# Eller enklare uttryckt (laddar in alla rader i minnet):
puts File.readlines("file.txt").size
Exempel 5: Säker filskrivning (atomisk skrivning)

För att undvika att filer skadas vid ett systemkrasch ska du först skriva till en tillfällig fil:

ruby
require 'tempfile'

Tempfile.create('safe_write') do |temp_file|
  temp_file.puts "Viktiga data"
  temp_file.puts "Ännu viktigare data"
  temp_file.flush

  # Ersätt nu målfilen atomärt
  File.rename(temp_file.path, "important.txt")
end

Arbeta med vägar

Användning File.expand_path, File.join, och Sökväg för stabil hantering av sökvägar:

ruby
require 'pathname'

path = Pathname.new("/tmp") / "myapp" / "log.txt"
File.write(path, "Logginlägg")

# Eller med hjälp av File.join
full_path = File.join(Dir.home, "Documents", "notes.txt")

Felhantering

Hantera alltid eventuella fel:

ruby
begin
  content = File.read("nonexistent.txt")
rescue Errno::ENOENT
  puts "Filen hittades inte!"
rescue Errno::EACCES
  puts "Åtkomst nekad!"
rescue => e
  puts "Fel: #{e.message}"
end

Eller mer idiomatiskt uttryckt:

ruby
if File.exist?("config.txt")
  config = File.read("config.txt")
else
  puts "Konfigurationsfilen saknas, standardinställningarna används"
end

Bästa metoder för att läsa och skriva filer i Ruby

  1. Använd alltid blockformat när det är möjligt – säkerställer att filen stängs.
  2. Användning File.read/File.write för enkla åtgärder som omfattar hela filer.
  3. Användning foreach för stora filer, för att undvika att allt laddas in i minnet.
  4. Ange kodning när man arbetar med text som inte är ASCII-kodad.
  5. Kontrollera om filen finns läs detta först om det behövs.
  6. Använd lämpliga lägen (särskilt i binärläge i Windows).
  7. Hantera undantag på ett elegant sätt i produktionskoden.

Slutsats

RailsCarmaett ledande Ruby on Rails utvecklingsföretag, utnyttjar våra erfarna utvecklare Rubys eleganta funktioner för fil-I/O för att leverera robusta och lätthanterliga applikationer. Rubys tydliga syntax, blockbaserad resurshantering och kraftfulla metoder som File.read och File.write göra filhantering i Ruby säker, effektiv och skalbar.

Oavsett om det handlar om att bearbeta konfigurationsfiler, hantera loggar, skapa rapporter eller bygga komplexa datapipelines, så är vår Rälsutvecklingstjänster säkerställa så lite standardkod som möjligt, maximal uttrycksfullhet och hög prestanda. Genom att välja att anställa Ruby-utvecklare Genom RailsCarma får du tillgång till kompetenta utvecklare som bygger pålitliga Rails-applikationer av hög kvalitet, skräddarsydda efter just dina affärsbehov.

relaterade inlägg

Om inläggsförfattare

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *


sv_SESwedish