C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Форматированный вывод текста, Вывод информации в текстовый файл
Steam-x
  Отправлено: 21.07.2005, 13:28


Дежурный стрелочник

Группа: Участник
Сообщений: 60



Может это и покажется глупо, но я так и не понял как в Билдере выводить текст в txt-файл.
В Си++ были прекрасные функции open и fopen, которые прекрасно работали с бинарными и текстовыми файлами. При работе с файлами можно было задавать тип и размерность выводимой информации. В Билдере появился FileOpen, работающий только с бинарной информацией.
Мне нужно вывести примитивную табличку в примитивный txt-файл(табличка должна быть красивой, т.е. ровные столбики и ровные строки).
Guest
Отправлено: 21.07.2005, 13:34


Не зарегистрирован







Подключаете stdio.h и пользуете fopen и иже с ним как в старом добром C.
Steam-x
Отправлено: 21.07.2005, 13:51


Дежурный стрелочник

Группа: Участник
Сообщений: 60



Подключаете stdio.h и пользуете fopen и иже с ним как в старом добром C.
Огромное спасибо за столь ценный совет.
Doga
Отправлено: 21.07.2005, 16:05


Мастер участка

Группа: Участник
Сообщений: 575



Для решения Вашей проблемы как нельзя лучше подходит функция AddCharR из библиотеки RxLib. А запись в текстовый файл лучше производить средствами класса TStringList.
Boyko
Отправлено: 21.07.2005, 16:09


Станционный диспетчер

Группа: Участник
Сообщений: 88



QUOTE (Steam-x @ 21/07/2005, 12:28)
В Билдере появился FileOpen, работающий только с бинарной информацией.


ohmy.gif

_fmode=O_TEXT;

и

FileOpen
FileRead
FileWrite
...

работают с текстовой информацией.

biggrin.gif
Doga
Отправлено: 21.07.2005, 16:16


Мастер участка

Группа: Участник
Сообщений: 575



2Boyko

Дело не втом чем читать и записывать файл. Просто человеку нужны удобные процедуры форматирования текста по колонкам smile.gif
Admin
Отправлено: 21.07.2005, 21:40


Владимир

Группа: Администратор
Сообщений: 1190



Често говоря не понял в чем прикол.

QUOTE
В Си++ были прекрасные функции open и fopen, которые прекрасно работали с бинарными и текстовыми файлами.


1. Они и остались — пользуйтесь, подключив stdio.h

2. Многие компоненты имеют возможность (методы) сохранения в файл.
Это практически все "строковые" компоненты — TComboBox, TListBox,
TMemo имеющие свойство Lines или Items типа TStrings

CODE

Memo1->Lines->SaveToFile() и LoadFromFile()
ListBox1->Items->SaveToFile()


сохраняете в текстовом файле строки (содержимое) компонента.

3. Что касается FileOpen() FileWrite() FileRead:
тоже можете сохранять строки, а не бинарные данные.

CODE

void WriteLogFile(AnsiString sf) // ведем некий текстовый log-файл
{
  int ih;
AnsiString LogFileName = GetCurrentDir() + "\\logfile.txt";

if(FileExists(LogFileName)){
ih = FileOpen(LogFileName, fmOpenReadWrite);
FileSeek(ih, 0, 2);
}
else ih = FileCreate(LogFileName); // файла нет — создаем, иначе — дописываем в конец

sf = AdjustLineBreaks( sf );
FileWrite( ih, (char*)sf.c_str(), sf.Length() );
FileClose( ih );
}


4. Есть такие классы как TFileStream — файловый поток,
TFileStream* fs = new TFileStream(FileName, fmOpenWrite);
также работаете методами
int __fastcall Read(void *Buffer, int Count);
int __fastcall Write(const void *Buffer, int Count);
int __fastcall Seek(int Offset, Word Origin);
потом delete fs;

5. Функции потоковые из С++ (iostream)

CODE

#include <iostream>
#include <fstream>
using namespace std;

AnsiString s = "ABCDEFGHIJKLMNOPRST";

fstream inout("fstream.out");
inout << s.c_str() << endl;
inout << "Das ist die rede von einem man" << endl;


Так что возможностей для вывода текста в txt файл
в Builder-е сколько угодно, выбирайте любой.

Отредактировано Admin — 21/07/2005, 21:44
Steam-x
Отправлено: 22.07.2005, 08:16


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (Doga @ 21/07/2005, 16:16)
2Boyko

Дело не втом чем читать и записывать файл. Просто человеку нужны удобные процедуры форматирования текста по колонкам smile.gif

Очень точно подмечено!
Steam-x
Отправлено: 22.07.2005, 08:22


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (Steam-x @ 21/07/2005, 13:28)

Мне нужно вывести примитивную табличку в примитивный txt-файл(табличка должна быть красивой, т.е. ровные столбики и ровные строки).

Работать с файлами я, слава Гейтсу, пару секунд назад научился. smile.gif
Вопрос был об удобстве. Я просто подумал, что в Виндах люди продолжают, иногда конечно, пользоваться тхт-файлами. Вот я и хотел узнать, как удобнее всего ВЫВОДИТЬ ФОРМАТИРОВАННЫЙ ТЕКСТ.

П.С. Большое спасибо за внимание к столь забавному вопросу.
Vlad
Отправлено: 22.07.2005, 10:41


Машинист паровоза

Группа: Участник
Сообщений: 231



CODE
Я просто подумал, что в Виндах люди продолжают, иногда конечно, пользоваться тхт-файлами.

Пользуются и еще как! Только не что бы красивые колонки в текстовом файле были, а файлы csv. Да вообще до барабана расширение, просто для импорта/экспорта используют текстовый файл, где разделителями полей используютя символы: :,|,;и т.д и т.п. Можете посмотреть например софтины -клиент-банк. А когда красивые колонки, в винде есть -ворд,эксель....
Guest
Отправлено: 22.07.2005, 11:37


Не зарегистрирован







QUOTE
Я просто подумал, что в Виндах люди продолжают, иногда конечно, пользоваться тхт-файлами.


biggrin.gif biggrin.gif biggrin.gif
Doga
Отправлено: 22.07.2005, 13:15


Мастер участка

Группа: Участник
Сообщений: 575



CODE

TStringList *FormatedTextList = new TStringList();
FormatedTextList->Clear();

int ColumnSize = 20;  //Максимальное кол-во символов в ячейках таблицы
int RowCount   = 10;
int ColCount     = 10;

AnsiString CellText = "Ячейка ";  //Собственно содержимое ячейкеи в Вашей табличке

for (int k = 0; k < RowCount; k++)
{
  FormatedTextList->Append("");

  for (int i = 0; i < ColCount; i++)
  {
     FormatedTextList->Strings[k] += AddCharR(' ', CellText + IntToStr(i) + " " + IntToStr(k), ColumnSize);
  }
}

FormatedTextList->SaveToFile("FormatedTable.txt");

delete FormatedTextList;


Вот, собственно, простой пример, как этой AddCharR пользоваться. smile.gif
Steam-x
Отправлено: 25.07.2005, 13:08


Дежурный стрелочник

Группа: Участник
Сообщений: 60



QUOTE (Doga @ 22/07/2005, 13:15)

Вот, собственно, простой пример, как этой AddCharR пользоваться. smile.gif

Большое спасибо!
Boyko
Отправлено: 26.07.2005, 16:12


Станционный диспетчер

Группа: Участник
Сообщений: 88



QUOTE (Doga @ 21/07/2005, 15:16)
2Boyko

Дело не втом чем читать и записывать файл. Просто человеку нужны удобные процедуры форматирования текста по колонкам smile.gif


А где чувство юмора?
wink.gif

А это не поможет?

AnsiString s;
...
s.sprintf();
s.cat_sprintf();
Doga
Отправлено: 26.07.2005, 19:41


Мастер участка

Группа: Участник
Сообщений: 575



biggrin.gif

Вернуться в Вопросы программирования в C++Builder