# Файлы

## Задача 1

Создать текстовый файл и добавить в него три текстовые строки.

```
f :- open("myfile.txt", write, Stream),
     write(Stream, "my string first"), nl(Stream),
     write(Stream, "my string second"), nl(Stream),
     write(Stream, "my string third"), nl(Stream),
     close(Stream).
```

Запускаем программу.

```
f.
```

## Задача 2

Создать текстовый файл и добавить в него целые числа на определённом отрезке.

```
true.

cycle(X, Y, Stream) :- N is X, write(Stream, N), X < Y, write(Stream, "  "), X_NEW = X + 1, !, cycle(X_NEW, Y, Stream).
cycleTrue(X, Y, Stream) :- cycle(X, Y, Stream); true.

f :- open("myfile.txt", write, Stream), cycleTrue(10, 20, Stream), close(Stream).
```

Запускаем программу.

```
f.
```

## Задача 3

Считать факты из файла и вывести их на экран через пробелы.

```
true.

cycle(MyStream) :- read(MyStream, X), !, not(X = end_of_file), write(X), write("  "), !, cycle(MyStream). 
cycleTrue(MyStream) :- cycle(MyStream); true.

main :- open("myfile.txt", read, MyStream), cycleTrue(MyStream), close(MyStream).
```

Запускаем программу.

```
main.
```

Содержимое файла **myfile.txt**

```
aaa.
bbbbb.
ccc.
xxxxx.
zzz.
```

## Задача 4

Считать факты из файла.

Провести фильтрацию считанных фактов по определённому критерию.

Вывести результат фильтрации на экран.

```
true.

myfilter(X) :- ok(X), write(X), write(" ").
myfilter(X) :- true.

ok(mmm).
ok(kkkkk).
ok(ccc).

cycle(MyStream) :- read(MyStream, X), 
                   !, not(X = end_of_file), 
                   !, myfilter(X), !, 
                   cycle(MyStream). 

cycleTrue(MyStream) :- cycle(MyStream); true.

main :- open("myfile.txt", read, MyStream), 
        cycleTrue(MyStream), 
        close(MyStream).
```

Запускаем программу.

```
main.
```

Содержимое файла **myfile.txt**

```
aaa.
bbbbb.
ccc.
xxxxx.
zzz.
kkkkk.
mmm.
qqqqq.
mmm.
ccc.
```

## Задача 5

Осуществить посимвольное чтение из файла.

Вывести на экран считанные символы и их код.

```
true.

readWord(InStream):- get_code(InStream, N), 
                     N > -1,
                     char_code(C, N),
                     writeNumberAndChar(N, C), 
                     true.

writeNumberAndChar(N, C) :- nl, write("Number: "), write(N), 
                            nl, write("Char: "), write(C), 
                            nl, true.


cycle(Stream) :- readWord(Stream), cycle(Stream).
cycleTrue(Stream) :- cycle(Stream); true.

main :- open("myfile.txt", read, MyStream),
        cycleTrue(MyStream),
        close(MyStream),
        nl,
        true.
```

Запускаем программу.

```
main.
```
