Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TStrings* to Char*, надо из файла в Memo1. 
V
    Опции темы
Sash31
Дата 17.12.2006, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.12.2006
Где: г. Электрогорск

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



Подскажите пожалуйста:

Мне необходимо сделать программу поиска по очень большим текстовым файлам (~200МБ). (*.seq)
Хочу считывать построчно ( fgets(.....) ) -  выдаёт char*.
И записывать в Memo1->Lines->Add(.....) - требует TStrings*.

Что делать? (Может можно как-то проще?)
PM MAIL   Вверх
codelord
Дата 17.12.2006, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



можно конвертировать 
Memo1->Lines->Add(AnsiString(char*));
или  
AnsiString name;
char *c;
c=name.c_str();

Добавлено @ 23:56 
но в случае с указателем лучше выделить под него необходимое колл-во памяти и копировать
полученную строку. т.к через какое-то время в name.c_str(); будет мусор.


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Sash31
Дата 19.12.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.12.2006
Где: г. Электрогорск

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



Спасибо, codelord...

Ещё вопрос:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE *fp;
fp = fopen("C:\GBDB\gbbct1.seq","r");
for (i = 0; i < 5000; i++)
   {
   buffer1 = "";
   fgets(buffer1, 40, fp);
   Memo1->Lines->Add(AnsiString(buffer1));
   }
}

компилируется, но при нажатии Button1 выводит сообщение об ошибке:

Project Project1 raised exception class EAccessViolation with message 'Access violation at address 32665A01 in module 'CC3260MT.DLL'. Read of address F82B5BF8. Process stopped. Use step or run to continue...

Пишет так для любых файлов, в том числе маленьких *.txt
PM MAIL   Вверх
codelord
Дата 19.12.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



а в каком месте ты выделяешь память для buffer1 а где у тебя объявления i.
и что такое buffer1=""; если это char. ?
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE *fp;
char *buffer1=new char[41];
fp = fopen("C:\GBDB\gbbct1.seq","r");
for (int i = 0; i < 5000; i++)
   {
   
   fgets(buffer1, 40, fp);
   Memo1->Lines->Add(AnsiString(buffer1));
   }
fclose(fp);
delete[] buffer1;
}



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Sash31
Дата 19.12.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.12.2006
Где: г. Электрогорск

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



Вот код:

Код

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <conio.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int i;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE *fp;    
char *buffer1=new char[41];
fp = fopen("C:\GBDB\gbbct1.seq","r");    
for (int i = 0; i < 5000; i++)
   {
   fgets(buffer1, 40, fp);
   Memo1->Lines->Add(AnsiString(buffer1));
   }    
fclose(fp);
delete[] buffer1;
}
//---------------------------------------------------------------------------


 
i - в 11-й строке.
В таком виде выдаёт ту же ошибку.

если я правильно понял, необходимо выделить память под buffer1...
я плохо представляю как это делается. smile
кажись 
buffer1 = (char*) calloc (41, sizeof(char));
так?
если да - где это вписать?

PM MAIL   Вверх
codelord
Дата 19.12.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



ладно давай решим твою проблему тем не менее на всякий случай скажу что у мемо есть такая чтука
Memo1->Lines->LoadFromFile("C:\\GBDB\\gbbct1.seq");
тут что то я упустил:
Код

fp = fopen("C:\GBDB\gbbct1.seq","r"); 

конечно должно быть сдвоенные слеши:
Код

fp = fopen("C:\\GBDB\\gbbct1.seq","r"); 




--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Sash31
Дата 19.12.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 17.12.2006
Где: г. Электрогорск

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



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

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

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

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

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


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

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


 




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


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

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