удаление столбца из текста

В общем дело в том что, иногда возникает такая проблема: попадается вам какой-нибудь текстовый файл, ну навскидку скажем, содержащий кучу записей вида 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_i

if 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
end

begin
nfile=File.new($outfile,”w”)
rescue => e
puts “Can’t create file #{$outfile}:#{e}”
exit
end

nums=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
end

nfile.close
file.close

По умолчанию разделителем является пробел, а имя выходного файла формируется путем прибавления к имени входного _out.

Ну вот и все, надеюсь он кому-нибудь пригодится.

No Comments.

Leave a Reply

(обязательно)

(обязательно)