LINUX.ORG.RU

Странное поведение с работой с файлом.

 


0

1

Доброго времени суток. Столкнулся с интересным поведением программы. Задача: Заменить символы табуляции в файле на 4 пробела.И записать все обратно в файл. Решение:

val file = new File("test.txt")
val answArr = Source.fromFile(file).getLines().map(_.replace("\t", "    "))
val pw = new PrintWriter(new FileOutputStream(file))
    for (x <- answArr.toArray)   pw.write(x)
 
pw.flush()
pw.close()
Или вот так:
val file = new File("test.txt")
val pw = new PrintWriter(new FileOutputStream(file))
val answArr = Source.fromFile(file).getLines().map(_.replace("\t", "    ")).forEach(str => pw.write(str))
 
pw.flush()
pw.close()
Однако на выходе получаю пустой свой файл. В обоих случаях. При этом, если распечатать в первом случае asnwArr(приведя его к листу), то получаю вроде бы верный ответ(т.е лист не пустой и с заменами табов) Но распечатав его еще раз - уже получаю пустой лист! Как так?

Пример:

val answ = Source.fromFile(file).getLines().map(_.replace("\t", " space "))
    println(answ.length)
    println(answ.length)
 
>> 2 
>> 0

Растолкуйте, пожалуйста, почему так? Очень благодарен всем за помощь!


Что-то мне подсказывает что пролема в том что

Source.fromFile(file).getLines()
возвращает итератор.

Вызови в конце toList() вроде

 val answ = Source.fromFile(file).getLines().map(_.replace("\t", " space ")).toList()

Должно помочь

sargeman
()
Ответ на: комментарий от sargeman

Бладжад, точно. А так получается я к итератору обратился, он сработал и все, да?Чтобы снова работать надо его заново делать.

aarexer
() автор топика
Ответ на: комментарий от BattleCoder

Совершенно верно, спасибо за замечание, но так как у меня небольшой скрипт, который отрабатывает и завершается, то не написал. Спасибо за замечание!

aarexer
() автор топика

oh. my. gosh.

sed 's/\t/    /g' tabs.txt > notabs.txt
anonymous
()
Ответ на: комментарий от sargeman

Это все эти val с выведением типов — компилятор-то выведет конечно, а вот программист в уме не всегда сможет. (Вернее сможет, но не каждый :) )

php-coder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.