Je travaille actuellement avec des fichiers de très grande largeur fixe, parfois bien plus d'un million de lignes. J'ai écrit une méthode qui peut écrire sur les fichiers en fonction d'un ensemble de paramètres, mais je pense qu'il doit y avoir un moyen plus efficace d'y parvenir. Le code actuel J'utilise est:Le moyen le plus efficace pour écrire dans un fichier de largeur fixe (Ruby)
def self.writefiles(file_name, positions, update_value)
@file_name = file_name
@positions = positions.to_i
@update_value = update_value
line_number = 0
@file_contents = File.open(@file_name, 'r').readlines
while line_number < @file_contents.length
@read_file_contents = @file_contents[line_number]
@read_file_contents[@positions] = @update_value
@file_contents[line_number] = @read_file_contents
line_number += 1
end
write_over_file = File.new(@file_name, 'w')
line_number = 0
while line_number < @file_contents.length
write_over_file.write @file_contents[line_number]
line_number += 1
end
write_over_file.close
end
Par exemple, si la position 25 dans le fichier indiqué qu'il est un fichier d'origine la valeur est réglée sur « O » et si je voulais remplacer cette valeur I utiliserait ClassName.writefiles (filename, 140, "X") pour changer cette position sur chaque ligne. Toute aide pour rendre cette méthode plus efficace serait grandement appréciée!
Merci
Super, je vais devoir essayer cela et voir quel genre de boost de performance je reçois. Juste une question rapide pour vous ... Comment pourrais-je modifier cela si plus d'une position aurait besoin d'être changée. E.G Je dois mettre à jour la date dans les positions 100..107. Merci encore pour l'aide! –
Hmmm juste utilisé le code que vous avez fourni et tout ce qu'il semble faire est de supprimer chaque ligne dans le fichier. –
Première partie ou seconde? J'ai essayé le premier, ça marche bien. La seconde est juste une idée, pas un code de travail. –