2016-05-26 9 views
-1

Ich versuche, Thumbnails mit Ruby, auf einem Linux-Rechner zu generieren.Ruby-Code, um nach einer bestimmten Datei zu suchen und sie umzubenennen, funktioniert nicht?

Der Prozess beinhaltet, zu bestimmen, welche der 5 Thumbnails, die bereits generiert wurden, am aussagekräftigsten ist (sinnvollerweise wollte ich hier die mit der höchsten Größe auswählen, da eine größere Größe mehr Details bedeutet).

Danach ging ich die Datei mit der größten Größe in einen generischen Namen umzubenennen, um es später zu verwenden. Der Code scheint nicht für mich zu arbeiten, und ich kann den Grund nicht verstehen, gibt es irgendwelche Vorschläge, um es zu verbessern?

Vielen Dank im Voraus.

Hier ist mein Code:

Für Ihre möglichen Bedürfnisse, die Variable thumb_dir enthält den Pfad des Verzeichnisses wir die Thumbnails bekommen, aus.

max = File.size("#{thumb_dir}/thumb01.jpg").to_f # 
name = "thumb01.jpg" 

for i in 2..5 
    if max < File.size("#{thumb_dir}/thumb0'"#{i}"'.jpg").to_f? 
    max = File.size("#{thumb_dir}/thumb0'"{i}"'.jpg" 
    name = "thumb0" + "#{i}" + ".jpg" 
    end 
end 

File.rename("#{thumb_dir}/#{name}", "thumbnail.jpg") ` 
+0

Da sind einige ziemlich gnarly Syntaxfehler drin. Bist du sicher, dass das dein Code ist? – tadman

+0

ja, es gehört mir, ich bin ein Anfänger, also wird es offensichtlich einige Fehler geben ... – MrRobot

+0

Normalerweise ist es eine gute Idee, es zumindest ohne Syntaxfehler laufen zu lassen, wenn man versucht, ein Problem zu lösen. Es gibt eine Menge Chaos in diesem Code. Wie bei allem Programmieren ist es wichtig, auf Details zu achten. – tadman

Antwort

1
i = (1..5).map {|i| File.size("#{thumb_dir}/thumb#{i}.jpg").to_f }.each_with_index.max[1] 

File.rename("#{thumb_dir}/thumb#{i + 1}.jpg", "thumbnail.jpg") 

Was macht es?

  1. (1..5).map {|i| File.size("#{thumb_dir}/thumb#{i}.jpg").to_f }

Wir erhalten eine Reihe von Dateigrößen für thumb1.jpg bis thumb5.jpg

  1. array.each_with_index.max[1]

Gebraucht um den Index des größten Wertes des Arrays zu erhalten.

  1. File.rename("#{thumb_dir}/thumb#{i+1}.jpg", "thumbnail.jpg")

Jetzt, da wir wissen, dass ich der Index des größten Wertes in dem Array ist, dann ist thumb#{(i+1)}.jpg die Datei mit der größten Größe, so dass das ist Eines wollen wir den Namen ersetzen.

+0

Danke, das ist meinem Code am nächsten, und das Verständnis davon scheint ziemlich glatt zu sein, besonders mit deinen Hinweisen. – MrRobot

0

dass in Ruby Denken Sie daran, eine Reihe von nützlichen Methoden in Enumerable es gibt, die diese Art der Sache ziemlich einfach machen:

# Expand to a list of possible thumbnail paths 
thumbnails = (2..5).map { |n| '%s/thumb%02d.jpg' % [ thumb_dir, n ] } 

# Find the biggest thumbnail by... 
biggest_thumbnail = thumbnails.select do |path| 
    # ...only dealing with those files that exist... 
    File.exist?(path) 
end.max_by do |path| 
    # ...and looking for the one with the maximum size. 
    File.size(path) 
end 

, dass die größte Datei zurückgeben sollte, falls vorhanden. Wenn nicht, erhalten Sie nil.

Sie können das verwenden umbenennen:

if (biggest_thumbnail) 
    File.rename(biggest_thumbnail, 'thumbnail.jpg') 
end 

Sie wollen Ihre Originalbilder sichern, bevor so etwas wie diese auf sie entfesseln, die möglicherweise eine Reihe von Dateien löschen können.

+0

können Sie bitte einige Kommentare und Details zu Ihrem Code hinzufügen? Ich kann es nicht verstehen ...oder wenn du willst, mache einfach korrekturen an meinem code, das wäre besser, weil ich es geschrieben habe, ich verstehe es, wie ich schon sagte, ich bin ein Anfänger. – MrRobot

+0

@MrRobot Einige Kommentare hier hinzugefügt, aber das wahre Verständnis kommt davon, mit diesem in 'irb' zu experimentieren oder anders zu sehen, wie sich die Teile verhalten. Jeder Schritt macht eine ganz bestimmte Sache. – tadman

Verwandte Themen