Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сохранение лог файла 
V
    Опции темы
emmanuil33
Дата 26.4.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.9.2007

Репутация: нет
Всего: нет



Доброго времени суток! 
Помогите плиз по такому вопросу: 
Сделал чтоб по нажатию кнопки тексты Edit и Label записывалисть в файл (ну ещё там дописывается дата и время) - типа лог файла.

Код

int fil;
if (FileExists("story.txt"))
fil = FileOpen("story.txt",fmOpenWrite);
else
fil = FileCreate("story.txt");
...
AnsiString st = cdate + " " + ctime + " " + "Долг" + Edit1->Text +
"   " + Label12->Caption + "   " + "Дни" + Edit2->Text +
"   " + Label10->Caption + "\r\n";
 FileWrite(fil, st.c_str(), st.Length());
...


Но вот в чём загвоздка - при каждом запуске программы он перезаписывает старые данные в этом файле.
Скажите как сделать чтоб при открытии файла он ставил курсор на самую нижнюю строчку.
Спасибо.

PM MAIL   Вверх
mrbrooks
Дата 26.4.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Здесь копай в сторону флагов в функции FileOpen("story.txt",fmOpenWrite); с ними стоит поиграться. может fmOpenReadWrite. я лично использую fopen() и чувствую себя конфортно. smile 
PM MAIL   Вверх
emmanuil33
Дата 26.4.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.9.2007

Репутация: нет
Всего: нет



А можно по подробней об fopen()? Как её использовать?
PM MAIL   Вверх
emmanuil33
Дата 26.4.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.9.2007

Репутация: нет
Всего: нет



Всё, уже разобрался: 

Код


#include "stdio.h"

FILE* fil; // дескриптор файла

 if( (fil = fopen("story.txt", "a")) == 0 ) {
     ShowMessage("Ошибка доступа к файлу");
   }

...

AnsiString st = cdate + " " + ctime + " " + "Долг" + Edit1->Text +
"   " + Label12->Caption + "   " + "Дни" + Edit2->Text +
"   " + Label10->Caption + "\r\n";
 fprintf(fil, "%s", st);

...


PM MAIL   Вверх
silversmith
Дата 26.4.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 18.12.2007
Где: Донецк, Украина

Репутация: нет
Всего: нет



Используйте стандартный потоковый ввод/вывод и будет вам счастье smile))

пример:

Код

//Где то вверху
#include <fstream>
using namespace std;

//В теле обработчика кнопки
        ofstream fout("story.txt", ios::app);
        if(!fout)
        {
                ShowMessage("Can't open file");
        }
        else
        {
                AnsiString st = cdate + " " + ctime + " " + "Долг" +
                Edit1->Text + "   " + Label12->Caption + "   " +"Дни"
                + Edit2->Text + "   " + Label10->Caption + "\r\n";
                fout << st.c_str();
        }
        fout.close();


Подробнее - в любом букваре по С++.

Это сообщение отредактировал(а) silversmith - 26.4.2008, 23:36
PM MAIL WWW ICQ   Вверх
mrbrooks
Дата 26.4.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



ок. и все таки интересно почему же это нельзя сделать с FileOpen. Надо обмозговать.
PM MAIL   Вверх
emmanuil33
Дата 27.4.2008, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.9.2007

Репутация: нет
Всего: нет



А скажите, пожалуйста, как этим же методом(fopen()) теперь из этого файла(story.txt) взять данные и загнать их в StringGrid, учитывая что пробел это переход на следующую ячейку?  
PM MAIL   Вверх
mrbrooks
Дата 28.4.2008, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Никак. 
Для этого тебе нужно использовать циклы и fscan или тот же потоковый ввод/вывод о котором писал silversmith
PM MAIL   Вверх
emmanuil33
Дата 28.4.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.9.2007

Репутация: нет
Всего: нет



Ну подскажите, плиз кто нибудь... Как из текстового файла вытащить содержимое в StringGrid и чтоб по пробелу разделялось на ячейки??
PM MAIL   Вверх
LastAngel
Дата 28.4.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 18.4.2008

Репутация: нет
Всего: нет



посимвольно считывай до признака конца строки и записывай куда хочешь и так в цикле до конца файла) если пробел в файле выполняй своё условие.


Это сообщение отредактировал(а) LastAngel - 28.4.2008, 20:16
PM MAIL   Вверх
emmanuil33
Дата 29.4.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.9.2007

Репутация: нет
Всего: нет



Спасибо! Уже нашёл как сделать: 

Код


int f; 
AnsiString st; 
bool fl = true; 
if (( f = FileOpen("story.txt",fmOpenRead)) == -1 )
return;

while ( GetLine(f, &st) != 0)
{

if ( fl )
{
StringGrid1->Rows[StringGrid1->Row]->DelimitedText = st;
fl = false;
}
else
{
StringGrid1->RowCount++;
StringGrid1->Row = StringGrid1->RowCount-1;
StringGrid1->Rows[StringGrid1->Row]->DelimitedText = st;
}
}
FileClose(f);
}

int GetLine(int f, AnsiString *st)
{
unsigned char buf[256];
unsigned char *p = buf; 
int n;
int len = 0; 
n = FileRead(f, p, 1 );
while ( n != 0 )
{
if ( *p == '\r')
{
n = FileRead(f, p, 1); 
break;
}
len++;
p++;
n = FileRead(f, p, 1);
}
*p = '\0';
if ( len !=0)
st->printf("%s", buf) ;
return len;



Но теперь другая проблема: когда попадается запятая в этом файле, то следующие за запятой символы переносятся в следующую ячейку. Подскажите плиз (желательно с примером) как сделать чтоб после запятой всё оставалось в этой ячейке до пробела.
Спасибо!
PM MAIL   Вверх
emmanuil33
Дата 30.4.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.9.2007

Репутация: нет
Всего: нет



Посоветуйте....
Сделал что после запятой следующие символы вставляет в эту же ячейку, но не могу сделать чтоб вставляло саму запятую:
(т.е. если идёт 8,56 то оно вставляет в одну ячейку 856) Как сделать чтоб вставляло и запятую?

Код


int f; 
AnsiString st; 
bool fl = true; 
if (( f = FileOpen("story.txt",fmOpenRead)) == -1 )
return;
while ( GetLine(f, &st) != 0)
{
if ( fl )
{
StringGrid1->Rows[StringGrid1->Row]->DelimitedText = st;
fl = false;
}
else
{
StringGrid1->RowCount++;
StringGrid1->Row = StringGrid1->RowCount-1;
StringGrid1->Rows[StringGrid1->Row]->DelimitedText = st;
}
}
FileClose(f);
}
int GetLine(int f, AnsiString *st)
{
unsigned char buf[256];
unsigned char *p = buf; 
int n;
int len = 0; 
n = FileRead(f, p, 1 );
while ( n != 0 )
{
if ( *p == ',')
{
n = FileRead(f, p, 1); 
}
if ( *p == '\r')
{
n = FileRead(f, p, 1); 
break;
}
len++;
p++;
n = FileRead(f, p, 1);
}
*p = '\0';
if ( len !=0)
st->printf("%s", buf) ;
return 



Кто нибудь, помогите плизззззз..... 
PM MAIL   Вверх
mrbrooks
Дата 30.4.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



в твоей ситуации я бы несколько иначе бы подошел к данной проблеме:
1. Использовал бы тип TStrinList
2. Работал бы чисто со AnsiString. Тем паче что есть разделитель в виде пробела



Это сообщение отредактировал(а) mrbrooks - 30.4.2008, 12:47
PM MAIL   Вверх
emmanuil33
Дата 30.4.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.9.2007

Репутация: нет
Всего: нет



А можно по подробней о TStrinList?
PM MAIL   Вверх
586
Дата 30.4.2008, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Код
TStringList *s = new TStringList();
s->Add("assdaad");
s->Add("asdasdasd");
s->SaveToFile("test.txt");
s->Free(); // уничтожение

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0842 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.