2017-02-19 4 views
0

Я узнал, что вы можете открыть/закрыть txt-файл и написать ему несколько раз (добавить). Хотя, каждый раз, когда я делаю это, начинается новая строка. В любом случае, я могу вернуться к тому, где курсор остановился? Спасибо!Ada: Backspace в добавленном текстовом файле

ответ

5

Использовать потоки и атрибут потока 'Write типа String. Атрибут обозначает процедуру, которая будет выводить голые данные строкового объекта.

with Ada.Streams.Stream_IO; 

procedure Write_Appending is 

    use Ada.Streams.Stream_IO; 

    F : File_Type; 

    procedure Write_Hello is 
    begin 
     String'Write (Stream (F), "Hello, "); 
    end Write_Hello; 

    procedure Write_World is 
    begin 
     String'Write (Stream (F), "World"); 
    end Write_World; 

begin 
    Create (F, Name => "Hello.txt"); 
    Write_Hello; 
    Write_World; 
    Close (F); 

    -- forgot "!", append it at the end of the file. 
    Open (F, Mode => Append_File, Name => "Hello.txt"); 
    Character'Write (Stream (F), '!'); 
    Close (F); 
end Write_Appending; 

Результирующий файл

$ cat Hello.txt 
Hello, World!$ 

Обратите внимание, как последняя строка файла не заканчивается с конца строки. Для написания до Current_Output рассмотрите Ada.Text_IO.Text_Streams (LRM A.12.2).

+0

Sweet! Теперь у меня есть противоположная проблема, как я могу выполнить возврат каретки вместо непрерывной записи в одну строку? XD – Numnumberry

+0

'Character'Write' будет делать это. CR имеет фиксированное порядковое положение ('' Pos') в типе 'Character', поэтому использование' 'Value' с этой позицией является одним из способов добавления CR для вывода. Более традиционным именем является 'ASCII.CR' из устаревшего пакета' ASCII'. – B98

+0

Я тоже подумал ... но вот мой код: напиши («удача»); \t Открыть (F, Append_File, "Hello.txt"); \t Character'Write (поток (F), ASCII.CR); \t Закрыть (F); ничего не происходит в текстовом файле, за исключением того, что удача печатается в одной строке при запуске несколько раз, я могу что-то делать неправильно – Numnumberry

2

Да. Используйте другой пакет ввода-вывода, чем Ada.Text_IO. Одним из вариантов может быть использование общего пакета Ada.Direct_IO, созданного с соответствующим типом символа.

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