Deutsch

C++

336  1 2 все
ойМОЛОДой местный житель10.02.05 16:27
ойМОЛОДой
NEW 10.02.05 16:27 
Пишу в Borland Builder.
Маленькая функция:

FILE *fp;
char LaName[256];
AnsiString Pfad = GetCurrentDir() + "\\data.dat";
fp = fopen(Pfad.c_str(), "r",0);
if (fp != NULL)
{
fscanf(fp, "%s", &LaName,0);
...
...
}
fclose(fp,0);

Т.е. считываю кой-чего из текстового файла, в котором имеется, скажем, просто строка текста.
Проблема: почему текст считывается только до первого пробела? И, разумеется, как это исправить?
Это вообще ещ╦ не готовая функция, спотыкаюсь в самом начале...
Для чего это нужно?..
Смысл такой. Имеется текст, состоящий из строк с таким содержанием:
имя (разделитель) фамилия (разделитель) возраст
Ну это, например. Содержание не так важно.
Нужно записать это вс╦ в массив.
Идея ещ╦ была вот такая:

fscanf(fp, "%s %s %d", &FiName, &LaName, &Age,0);

Но не знаю, как вставить разделитель. Выискал функцию strtok(), но тоже что-то толку нет. В общем, впору кричать "караул".
"...вечно молодой, вечно пьяный..."
"...вечно молодой, вечно пьяный..."
#1 
gendy коренной житель10.02.05 16:44
gendy
NEW 10.02.05 16:44 
в ответ ойМОЛОДой 10.02.05 16:27
а почему такую неудачную функцию выбрал? fscanf читает только до конца строки.
читай с fread.
а второе лучше структурой делать
struct Data
{
char FiName[100];
char LaName[100];
int Age;
};
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#2 
ойМОЛОДой местный житель10.02.05 16:51
ойМОЛОДой
NEW 10.02.05 16:51 
в ответ gendy 10.02.05 16:44
Ну вот не читает оно у меня до конца строки. Как ни крутил. Понять не могу...
"...вечно молодой, вечно пьяный..."
"...вечно молодой, вечно пьяный..."
#3 
gendy коренной житель10.02.05 17:06
gendy
NEW 10.02.05 17:06 
в ответ ойМОЛОДой 10.02.05 16:51
бери fread и не морочь себе голову.
есть ещ╦ интересный способ - с использованием
TIniFile
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#4 
ойМОЛОДой местный житель10.02.05 17:12
ойМОЛОДой
NEW 10.02.05 17:12 
в ответ gendy 10.02.05 17:06
Да, про INI я знаю. Но надо именно без него.
"...вечно молодой, вечно пьяный..."
"...вечно молодой, вечно пьяный..."
#5 
ойМОЛОДой местный житель10.02.05 17:20
ойМОЛОДой
NEW 10.02.05 17:20 
в ответ gendy 10.02.05 17:06
Ок, взял fread(), теперь только не пойму, как мне строку от строки отделить. Можно для дураков ещё раз объяснить, если не сложно?
"...вечно молодой, вечно пьяный..."
"...вечно молодой, вечно пьяный..."
#6 
gendy коренной житель10.02.05 17:21
gendy
NEW 10.02.05 17:21 
в ответ ойМОЛОДой 10.02.05 16:51
а как оно читать будет, если переменная заканчивается нул╦м, вот он до нуля читает и хватит. если хочешь использовать fscanf - читай каждую переменную по раздельности
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#7 
ойМОЛОДой местный житель10.02.05 17:21
ойМОЛОДой
NEW 10.02.05 17:21 
в ответ gendy 10.02.05 17:06
Есть вот такая идея. Записать данные в файл в виде:
имя, фамилия, возраст;
имя, фамилия, возраст;
...
Потом можно будет с помощью чего-нибудь типа index() их разделить. Так?
"...вечно молодой, вечно пьяный..."
"...вечно молодой, вечно пьяный..."
#8 
ойМОЛОДой местный житель10.02.05 17:23
ойМОЛОДой
NEW 10.02.05 17:23 
в ответ gendy 10.02.05 17:21
В ответ на:

а как оно читать будет, если переменная заканчивается нулём, вот он до нуля читает и хватит. если хочешь использовать fscanf - читай каждую переменную по раздельности


теперь догнал, что к чему в этой fscanf(). спасибо!
Только тогда уж я лучше в самом деле fread() возьму.
"...вечно молодой, вечно пьяный..."

"...вечно молодой, вечно пьяный..."
#9 
gendy коренной житель10.02.05 17:29
gendy
NEW 10.02.05 17:29 
в ответ ойМОЛОДой 10.02.05 17:21
Есть вот такая идея. Записать данные в файл в виде:
имя, фамилия, возраст;
имя, фамилия, возраст;
...

структуру бери
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Фашизм будет разбит


Человека карают только те боги, в которых он верит

#10 
digital_pilot der Mann von der Panzerwiese10.02.05 17:29
NEW 10.02.05 17:29 
в ответ ойМОЛОДой 10.02.05 17:23
или стрим.
#include<fstream.h>
char name [100], firstname [100];
int age;
ifstream src;
src.open("D:\\myfile.txt",ios::nocreate,0);
while (!src.eof()) {
src>>name>>firstname>>age;
cout<<name<<" "<<firstname<<" "<<age<<"\n";
}
--------------
Авиатор х#ев
#11 
Murr местный житель10.02.05 19:02
Murr
NEW 10.02.05 19:02 
в ответ ойМОЛОДой 10.02.05 16:51
Ну вот не читает оно у меня до конца строки.
---------------
Читает [f]gets(), a через [f]scanf надо правильно задавать параметры - там их 5 штук - все читается.
#12 
Murr местный житель10.02.05 19:07
Murr
NEW 10.02.05 19:07 
в ответ gendy 10.02.05 17:29
на самом деле - почти без разницы.
fscanf может читать текстовый, невыровненый файл,
а для fread нужно будет подгонять двоичный формат, включая последнее число

#13 
Murr местный житель10.02.05 19:13
Murr
NEW 10.02.05 19:13 
в ответ digital_pilot 10.02.05 17:29, Последний раз изменено 10.02.05 19:18 (Murr)
Если уж говорить об ПлюсАх...
class Data
{
public:
Data() {...};
~Data() {...};
protected:
virtual ifstream& operator>>(ifstream&) {...}
virtual ofstream& operator<<(ofstream&) {...}
private:
char FiName[100];
char LaName[100];
int Age;
}
Да?
#14 
Murr местный житель10.02.05 19:17
Murr
NEW 10.02.05 19:17 
в ответ ойМОЛОДой 10.02.05 16:27
Пишу в Borland Builder.
------------
Не заметил.
Базу в Аксесе, таблицу с полями, дальше - коннектион к базе и навигация через методы таблицы.
То, об чем ты спрашиваешь - стандартный Си, фактически уже лет 10 как почти мертвое.
#15 
digital_pilot der Mann von der Panzerwiese10.02.05 19:19
NEW 10.02.05 19:19 
в ответ Murr 10.02.05 19:13
ну, если товарищ заодно хочет подзарулить в дебри ООП.... А вообще (если под виндоуз), затея со считыванием текстовых таблиц заданного формата своими самопальными парсерами мне никогда не нравилась. Есть ADO, есть MS Jet - это работа для них :)))
--------------
Авиатор х#ев
#16 
Murr местный житель10.02.05 19:20
Murr
NEW 10.02.05 19:20 
в ответ digital_pilot 10.02.05 19:19
Если только длина строк не переменна.
#17 
digital_pilot der Mann von der Panzerwiese10.02.05 19:23
10.02.05 19:23 
в ответ Murr 10.02.05 19:20
какая разница. Можно и переменной. Semicolon-separated, tab-separated, CSV - Jet сожрет.
--------------
Авиатор х#ев
#18 
Murr местный житель10.02.05 19:33
Murr
NEW 10.02.05 19:33 
в ответ digital_pilot 10.02.05 19:23
имелся в виду "не плоский" файл, когда строки не равны по количеству полей и содержат инфу об полях.
строка 1: [ФИГ]фамилия имя год
строка 2: [CAR]зеленая
#19 
digital_pilot der Mann von der Panzerwiese10.02.05 19:45
NEW 10.02.05 19:45 
в ответ Murr 10.02.05 19:33
гм... ну это уже другое дело. Поэтому я и написал "заданного формата" ;)
--------------
Авиатор х#ев
#20 
1 2 все