Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Вопрос знатокам. Работа с файлами, строками, буфером.

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Вопрос знатокам. Работа с файлами, строками, буфером.
Имя
Сообщение << Старые топики   Новые топики >>
Вопрос знатокам. Работа с файлами, строками, буфером. - 2006-11-25 12:59:38.576666   
tromp

Сообщений: 4
Оценки: 0
Присоединился: 2006-11-24 21:59:11.233333
Здравствуйте.
 
Что есть: открываю файл функцией fopen, считываю строку определённой длины функцией fgets, её записываю в tempfile на винте и разбираю на части функциями типа fgets, fseek, fgetc, ftell.
 
Что хочеться: открыть файл, считать строку опред. длины чем-то типа fgets, поместить в память (в строку/буфер), и разобрать на части чем-то типа fgets, fseek, fgetc, ftell.
 
Эти части потом будут засунуты в sql БД.
 
Подскажите, кто знает, как это реализовать в Си.
 
И ещё, хотелось бы узнать, как это реализовать в C++ (В ООП).
 
Спасибо.
 
P.S. Я пользуюсь Borland Developer Studio 2006 со всеми вытекающими…
Post #: 1
RE: Вопрос знатокам. Работа с файлами, строками, буфером. - 2006-11-25 13:30:37.920000   
Freackazoid

Сообщений: 47
Оценки: 0
Присоединился: 2006-04-30 23:39:27
Я не зняток но всетаки…
Разбить строку на части удбнее всего используя функцию С++ (не С, если надо чисто С, то можно в цикле) char *strtok(char*, char*);
quote:


&lt;string.h&gt;
char* strtok(char*str1, char* str2);
Функция последовательно возврящает указатель на лексемы в строке адресуемой параметром str1. Символы, адресуемые строкой str2, представляют собой разделители. При отсутсвии лекскмы, подлежащей возвряту возврящаеться нулевой указатель.
… (Можешь почитать в справочнике Шилдта)


Например, переаем в прогу строку Ivanov Ivan Ivanich
int main (char* str[])
{
    char * mas[3];
    char *raz=",.;:!?    ";
    int i=0;
   
    mas=strtok(str,raz);
&nbsp;&nbsp;&nbsp; while(mas)
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; i++;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; mas=strtok(NULL,raz);
&nbsp;&nbsp;&nbsp; }
if (i&gt;0) return 0;
else return 1;
}
Post #: 2
RE: Вопрос знатокам. Работа с файлами, строками, буфером. - 2006-11-25 18:32:18.293333   
tromp

Сообщений: 4
Оценки: 0
Присоединился: 2006-11-24 21:59:11.233333
Задача: сделать конвертер из текстового файла одного хитрого формата в sql базу данных. Файл представляет собой набор строк, заканчивающихся спец.символом. Формат этих строк такой, что в пределах одной строки нужно постоянно перемещаться от начале в конец и наоборот. В начале строки идут указатели (в кол-ве байт) на информацию, идущую в этой строке после определённого спец.символа. В самом начале строки 5-ю первыми байтами указана её длина.
Я сделал так: открываю файл, считываю первые 5 байт, перевожу их в число (atoi), потом, имея длину, считываю "длина строки - 5" байт в строковой массив, проверяю, есть ли в конце спец.символ, если есть, строка без ошибок. Потом этот массив записываю в файл, и с этим файлом уже работаю функциями типа fgets, fseek, fgetc, ftell,
извлекая из него информацию по указателям.
 
С самим основным файлом в пределах одной строки так работать невозможно. Там может быть 200-300 тысяч строк, по 10-20 кб каждая.
 
Мне не нравиться промежуточная запись в файл. Получаеться совсем не рационально. Считывание из основного файла, запись во временный файл, работа с ним, удаления старой информации, записть новой, и так по кругу.
 
Вот если можно было бы работать прямо с этим массивом функциями типа fgets, fseek, fgetc, ftell или им подобными, для этого случая и предназначенными… О том и спрашиваю.
Post #: 3
RE: Вопрос знатокам. Работа с файлами, строками, буфером. - 2006-11-25 21:46:04.980000   
Freackazoid

Сообщений: 47
Оценки: 0
Присоединился: 2006-04-30 23:39:27
Честно пытаюсь разобраться в твоих словах…
Абсолютно не понимаю, что же у тебя идет первым указатели или 5 байт с длиной? Похоже все-таки длина.
Я понимаю так: сначала у тебя идет какое-то число, которое указывает длину твоей строки в байтах,
и само это число занимает 5 байт. Потом у тебя идет определенное кол-во цифр, которые содержат длину
подстрок, каждая из которых являеться одним полем данных. Потом идет спец сивол, после которого
начинаеться строка, подстроки которой надо выделить. И заканчиваеться это все тоже спец символом.
Во-первых: абсолютно непонятно каким образом ты обрабатываешь строки. Если ты просто разбиваешь
информационную строку на подстроки, то могу предложить такой вариант.
Открываешь файл fopen'ом, считываешь первые 5 байт, потом с помощью fscanf'a cчитываешь длины твоих
подстрок в какой нить массив. А потом зная эти длины считываешь подстроки fges'ом, также в отдельный
массив char* str[xz]. 
Post #: 4
RE: Вопрос знатокам. Работа с файлами, строками, буфером. - 2006-11-26 02:43:11.483333   
tromp

Сообщений: 4
Оценки: 0
Присоединился: 2006-11-24 21:59:11.233333
 Значит так: файл -> 5 байт (длина строки) -> 1-вый указатель (например, тип 123(это неважно), длина 1234 (кол-во байт от спец.символа)), 2-й указатель и т.д.
 
Вообщем, ты правильно понимаешь. Вот только я спрашивал, как или какими функциями можно работать с буффером/строкой как с файлом?

И в качестве примера требуемых функций я привёл fgets, fseek, fgetc, ftell. Если подскажешь мне похожие функции для работы со строкой/массивом или схему работы через какую-нибудь ссылку или указатель, буду очень благодарен.

А вообще, если ты напишешь мне номер своей аськи на tromp(собака)sstu(точка)smr(точка)ru, я думаю, всё пойдёт быстрее.
 
Спасибо.
Post #: 5
RE: Вопрос знатокам. Работа с файлами, строками, буфером. - 2006-11-26 16:33:22.013333   
Freackazoid

Сообщений: 47
Оценки: 0
Присоединился: 2006-04-30 23:39:27
Если работать со строкой нужно именно на СИ без всяких плюсов. То есть простой выход. Всю строку можно поместить в массив типа char Т.к char на 32 разрядных системах имеет размер 1 байт то соответственно обращаться к нужным частям можно по данным указателя. т .е str[1234]. ИМХО это будет аналогично использованию fseek ftell
Post #: 6
RE: Вопрос знатокам. Работа с файлами, строками, буфером. - 2006-11-26 19:12:53.466666   
tromp

Сообщений: 4
Оценки: 0
Присоединился: 2006-11-24 21:59:11.233333
Спасибо за советы, буду разбираться.
Post #: 7
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Вопрос знатокам. Работа с файлами, строками, буфером.







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.