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, работающий только с бинарной информацией.
|
_fmode=O_TEXT;
и
FileOpen
FileRead
FileWrite
...
работают с текстовой информацией.
|
|
Doga |
Отправлено: 21.07.2005, 16:16 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
2Boyko
Дело не втом чем читать и записывать файл. Просто человеку нужны удобные процедуры форматирования текста по колонкам
|
|
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
Дело не втом чем читать и записывать файл. Просто человеку нужны удобные процедуры форматирования текста по колонкам |
Очень точно подмечено!
|
|
Steam-x |
Отправлено: 22.07.2005, 08:22 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 60
|
QUOTE (Steam-x @ 21/07/2005, 13:28) |
Мне нужно вывести примитивную табличку в примитивный txt-файл(табличка должна быть красивой, т.е. ровные столбики и ровные строки). |
Работать с файлами я, слава Гейтсу, пару секунд назад научился.
Вопрос был об удобстве. Я просто подумал, что в Виндах люди продолжают, иногда конечно, пользоваться тхт-файлами. Вот я и хотел узнать, как удобнее всего ВЫВОДИТЬ ФОРМАТИРОВАННЫЙ ТЕКСТ.
П.С. Большое спасибо за внимание к столь забавному вопросу.
|
|
Vlad |
Отправлено: 22.07.2005, 10:41 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
CODE | Я просто подумал, что в Виндах люди продолжают, иногда конечно, пользоваться тхт-файлами. |
Пользуются и еще как! Только не что бы красивые колонки в текстовом файле были, а файлы csv. Да вообще до барабана расширение, просто для импорта/экспорта используют текстовый файл, где разделителями полей используютя символы: :,|,;и т.д и т.п. Можете посмотреть например софтины -клиент-банк. А когда красивые колонки, в винде есть -ворд,эксель.... |
|
Guest |
Отправлено: 22.07.2005, 11:37 |
|
Не зарегистрирован
|
QUOTE | Я просто подумал, что в Виндах люди продолжают, иногда конечно, пользоваться тхт-файлами. |
|
|
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 пользоваться.
|
|
Steam-x |
Отправлено: 25.07.2005, 13:08 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 60
|
QUOTE (Doga @ 22/07/2005, 13:15) |
Вот, собственно, простой пример, как этой AddCharR пользоваться. |
Большое спасибо!
|
|
Boyko |
Отправлено: 26.07.2005, 16:12 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
QUOTE (Doga @ 21/07/2005, 15:16) | 2Boyko
Дело не втом чем читать и записывать файл. Просто человеку нужны удобные процедуры форматирования текста по колонкам |
А где чувство юмора?
А это не поможет?
AnsiString s;
...
s.sprintf();
s.cat_sprintf();
|
|
Doga |
Отправлено: 26.07.2005, 19:41 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
|
|