2013-07-25 4 views
0

Хорошо, я попытался удалить строки, содержащие - из файла. Файл выглядит следующим образом:Удаление строки в текстовом файле

----------------------------------------------------------------- 
    Lorem ipsum.... 
    Text..... 

И мой код:

f = File.open('C:\websites\ahr.txt') 
    f.each_line do |line| 
    if line.include? '-' 
    a = line 
    line.delete a 
    end 
    end 
f = File.close 

Но это не будет работать! Я получаю эту ошибку:

file.rb:5:in `delete': invalid range "-- (ArgumentError) 
" in string transliteration 
    from file.rb:5:in `block in <main>' 
    from file.rb:2:in `each_line' 
    from file.rb:2:in `<main>' 

Что происходит?

+1

Вы хотите написать изменения прямо сейчас? Вы хотите просто удалить строку '-' или всю строку, если она содержит по крайней мере один' -'? – Dogbert

+0

Я хотел бы удалить целую строку, если она содержит: - –

+2

Если вам не нужно использовать ruby ​​для этого, вы можете сделать это тривиально с помощью 'grep -v" - "ahr.txt' –

ответ

1

Как и другие, вы можете сделать это с помощью grep, но если вы хотите сделать это полностью в Ruby, посмотрите на this question, первый ответ вам поможет.

+0

Когда я использую grep, как я могу переопределить свой файл с изменениями? –

+1

AFAIK, это невозможно с grep, но вы можете перенаправить вывод на другой файл, например 'grep -v" - "input.txt> output.txt' –

2

So whats going on?

Что-то вроде этого:

line = "-----------------------------------\n" 
=> "-----------------------------------\n" 

a = line 
=> "-----------------------------------\n" 

line.delete a 
ArgumentError: invalid range "-- 
" in string transliteration 

Ошибки поднятого метода delete происходит потому, что тир используется для специального синтаксиса символьного диапазона:

"hellob".delete "a-e" 
=> "hllo" 

Вероятно, вы хотите принимать другой подход к решению вашей цели, но трудно сказать, что вы хотите, так как вы не показываете, что хотите делать с данными после удаления строк. Просто обработка переменной line просто означает, что вы изменили String в этот момент.

+0

Но что произойдет Если я не сейчас, как долго проходит линия с ---? –

+0

@Em Sta: Ничего не происходит в вашем сценарии как есть. У вас неправильное поведение 'delete'. Как написано. он даже не изменит содержимое переменной 'line', не говоря уже о содержимом файла. Он * возвращает * измененную строку, которую ваш код не использует каким-либо образом. –

+0

жаль, что я ответил так поздно. Моя цель состоит в том, что строки, содержащие - или несколько, удаляются. Но я не хочу, чтобы линия была пустой! –

Смежные вопросы