удаление столбца из текста
В общем дело в том что, иногда возникает такая проблема: попадается вам какой-нибудь текстовый файл, ну навскидку скажем, содержащий кучу записей вида login:date:ip:pass, а вам нужно сделать файлик вида login:pass. Как с этим справится используя MS или Open Office и другие текстовые редакторы, по крайней мере, я незнаю. Поэтому пришлось написать такой малюсенький скриптик на моем любимом Ruby.
Собственно скрипт удаляет лишний столбец из файла.
На вход подаются такие значения:
- infile – входной файл (файл из которого следует удалить лишний столбец)
- number of dead row – номер лишнего столбца, нумерация с нуля
- divider – разделитель между столбцами
- outfile – выходной файл
- ключ -s – включает сортировку
Вот сам код:
#!/usr/bin/ruby
if ARGV.size<2 or ARGV.size>5
puts “Not enought arguments\n<infile> <number of dead row> [<divider> [<outfile> [-s]]]”
puts “default <divider> is blank \’ \’”
puts “default <outfile> is <infile> + \’_out\’”
exit
end
$infile=ARGV[0]
$deadrow=ARGV[1].to_iif ARGV.size>=3 then $divider=ARGV[2] else $divider=’ ‘ end
if ARGV.size>=4 then $outfile=ARGV[3] else $outfile=”#{$infile}_out” end
if ARGV.size>=5 and ARGV[4]==’-s’ then $show=true else $show=false end
str=”begin
file=File.new($infile,”r”)
rescue => e
puts “Can’t read file #{$infile}:#{e}”
exit
endbegin
nfile=File.new($outfile,”w”)
rescue => e
puts “Can’t create file #{$outfile}:#{e}”
exit
endnums=0
while str!=nil
str=file.gets
if str!=nil
nums+=1
begin
nstr=str.split($divider)
nstr.delete_at($deadrow)
nstr=nstr.join($divider)
rescue => e
puts “Line #{nums}:#{e}”
end
if $show then puts nstr end
nfile.puts nstr
end
endnfile.close
file.close
По умолчанию разделителем является пробел, а имя выходного файла формируется путем прибавления к имени входного _out.
Ну вот и все, надеюсь он кому-нибудь пригодится.