Skip to content

Instantly share code, notes, and snippets.

@korutsuru
Forked from chischaschos/analyzer.rb
Created December 8, 2010 09:54
Show Gist options
  • Save korutsuru/733098 to your computer and use it in GitHub Desktop.
Save korutsuru/733098 to your computer and use it in GitHub Desktop.
=begin
Ok, me tome la libertad de llenar este programa de comentarios
en virtud de que quede super bien entendido ¿ok?, trataré de
comentarlo a nivel noobie.
=end
headers = nil #aqui almacenaremos los headers (les dije que nivel noobie!)
rows = [] #se declara un array que de momento esta vacio, aqui guardaremos las filas
File.open(ARGV[0] || 'data.csv', 'r') do |file|
=begin
File.open('file name','mode') do |x|
donde x podremos poner el nombre de la cadena que será tratada como una linea de texto
los modos pueden ser:
r=solo lectura
r+=lectura-escritura
w=solo escritura
ARGV es un array global donde se almacenara cualquier cosa
que escribas despues del nombre de tu programa de ruby.
por ejemplo si corres el programa así:
ruby analizer.rb "hola mundo" "como estan" 4
el array ARGV tomará estos valores:
ARGV ["hola mundo","como estan",4]
Entonces el nombre del archivo que abriremos es:
ARGV[0] || 'data.csv' (recuerden que || es OR)
osea el nombre del archivo puede ser ARGV[0] OR el archivo 'data.csv'
esto nos da chance de tener dos formas de ejecutar el programa
forma 1:
ruby analizer.rb
forma 2:
ruby analizer.rb 'filename.csv'
la forma 2 nos da oportunidad de elegir otro csv en vez del data.csv
que pusimos por default.
=end
headers = file.gets.split(',') #file de momento es la primer línea de texto y se almacena en headers dividida por comas
while(line = file.gets) do #aqui file ya es la segunda linea de texto y entra en el ciclo while hasta que termina, en cda vuelta se le asigna el valor de file.gets a 'line'
cols = line.split(',') #la linea 'line' se divide por comas y se almacena en cols
#en la primera vuelta será cols ['September 13, 2010','Pepe Juarez','No'"Complete task # 34",'learn ruby']
rows << cols #con << se iran uniendo cada columna a la fila creando un array multidimensional
=begin
rows [['September 13, 2010','Pepe Juarez','No',"Complete task # 34",'learn ruby']
['October 20, 2010','Pepe Juarez','Yes',"Complete task # 65",'A new issue arose on XYZ module']]
=end
end
end
puts "Tu csv tiene #{headers.size} columnas " #.size es igual a .lenght te dice la cantidad de elementos dentro
puts "Tu csv tiene #{rows.size} renglones " #.size es igual a .lenght te dice la cantidad de elementos dentro
#////////////////////////////////////////////////////////////////////////////////////////////
# Imprime el ultimo elemento de la primer fila
#////////////////////////////////////////////////////////////////////////////////////////////
puts rows[0].last #pone el ultimo elemento de la primera fila que es 'learn ruby'
puts "-"*20 #linea punteada fancy, no le hagan caso
#////////////////////////////////////////////////////////////////////////////////////////////
# Imprime las fechas
#////////////////////////////////////////////////////////////////////////////////////////////
rows.each do |element| #pasara por ambos arrays dentro de rows y a cada elemento dentro de cada array se les llamara 'element'
puts "Las fechas son #{element[0]}" #elemento 0 del array 1 es: 'September 13, 2010'
#elemento 0 del array 2 es: 'October 20, 2010'
end
puts "-"*20 #linea punteada fancy, no le hagan caso
#////////////////////////////////////////////////////////////////////////////////////////////
# Aqui no se que hace xD
#////////////////////////////////////////////////////////////////////////////////////////////
count = 0
rows.each do |element|
element[2].gsub!(/^\s/, '')
=begin
gsub!(a,b) sustituye a con b
a debe ser un pattern (regular expresion)
lo que entendí es que las patterns en ruby se escriben dentro de slashes /pattern/
y en este caso segun entendi despues de una breve leida
^(lo que comience con)\s(espacio) sera sustituido por ''
en otras palabras quiere eliminarle los espacios a como entendi esto pero not so sure :/
=end
count += 1 if element[2].chomp == 'Pepe Juarez' #el .chomp le quita el ultimo caracter a element[2] creo que lo utilizamos mal
end
puts "Contador = #{count}"
#////////////////////////////////////////////////////////////////////////////////////////////
# Quiero que me diga cuantas tareas esta haciendo pepe juarez (creo que era lo que hicimos en el anterior)
#////////////////////////////////////////////////////////////////////////////////////////////
c=0
rows.each do |element|
c+=1 if element[2].to_s =='Pepe Juarez' #el to_s pasa el elemento a cadena
end
print (c>0? "Pepe Juarez realizo #{c} tareas" :'pepe no hizo nada') #forma corta del if: condition? true : false
headers = nil
rows = []
File.open(ARGV[0] || 'data.csv', 'r') do |file|
headers = file.gets.split(',')
while(line = file.gets) do
cols = line.split(',')
rows << cols
end
end
puts "Tu csv tiene #{headers.size} columnas "
puts "Tu csv tiene #{rows.size} renglones "
# Imprime la ultima columna del primer elemento
puts rows[0].last
puts "-"*20
rows.each do |element|
puts "Las fechas son #{element[0]}"
end
puts "-"*20
count = 0
rows.each do |element|
element[2].gsub!(/^\s/, '')
count += 1 if element[2].chomp == 'Pepe Juarez'
end
puts "Contador = #{count}"
Date Team member Was I able to fulfill what I committed to? What am I comfortable committing to today? What is obstructing me in meeting my commitments?
September 13, 2010 Pepe Juarez No Complete task # 34 learn ruby
October 20, 2010 Pepe Juarez Yes Complete task # 65 A new issue arose on XYZ module
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment