Login
C++
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(), но тоже что-то толку нет. В общем, впору кричать "караул".
"...вечно молодой, вечно пьяный..."
Маленькая функция:
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(), но тоже что-то толку нет. В общем, впору кричать "караул".

"...вечно молодой, вечно пьяный..."
[син]"...вечно молодой, вечно пьяный..."[/син]
NEW 10.02.05 16:44
in Antwort ойМОЛОДой 10.02.05 16:27
а почему такую неудачную функцию выбрал? fscanf читает только до конца строки.
читай с fread.
а второе лучше структурой делать
struct Data
{
char FiName[100];
char LaName[100];
int Age;
};
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
читай с fread.
а второе лучше структурой делать
struct Data
{
char FiName[100];
char LaName[100];
int Age;
};
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Фашизм будет разбит
Человека карают только те боги, в которых он верит
NEW 10.02.05 16:51
in Antwort gendy 10.02.05 16:44
Ну вот не читает оно у меня до конца строки.
Как ни крутил. Понять не могу...
"...вечно молодой, вечно пьяный..."

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

"...вечно молодой, вечно пьяный..."
[син]"...вечно молодой, вечно пьяный..."[/син]
10.02.05 17:21
in Antwort ойМОЛОДой 10.02.05 16:51
а как оно читать будет, если переменная заканчивается нул╦м, вот он до нуля читает и хватит. если хочешь использовать fscanf - читай каждую переменную по раздельности
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Фашизм будет разбит
Человека карают только те боги, в которых он верит
NEW 10.02.05 17:21
in Antwort gendy 10.02.05 17:06
Есть вот такая идея. Записать данные в файл в виде:
имя, фамилия, возраст;
имя, фамилия, возраст;
...
Потом можно будет с помощью чего-нибудь типа index() их разделить. Так?
"...вечно молодой, вечно пьяный..."
имя, фамилия, возраст;
имя, фамилия, возраст;
...
Потом можно будет с помощью чего-нибудь типа index() их разделить. Так?
"...вечно молодой, вечно пьяный..."
[син]"...вечно молодой, вечно пьяный..."[/син]
NEW 10.02.05 17:23
in Antwort gendy 10.02.05 17:21
В ответ на:а как оно читать будет, если переменная заканчивается нулём, вот он до нуля читает и хватит. если хочешь использовать fscanf - читай каждую переменную по раздельности
теперь догнал, что к чему в этой fscanf(). спасибо!
Только тогда уж я лучше в самом деле fread() возьму.
"...вечно молодой, вечно пьяный..."
[син]"...вечно молодой, вечно пьяный..."[/син]
NEW 10.02.05 17:29
in Antwort ойМОЛОДой 10.02.05 17:21
Есть вот такая идея. Записать данные в файл в виде:
имя, фамилия, возраст;
имя, фамилия, возраст;
...
структуру бери
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
имя, фамилия, возраст;
имя, фамилия, возраст;
...
структуру бери
Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Фашизм будет разбит
Человека карают только те боги, в которых он верит
NEW 10.02.05 17:29
in Antwort ойМОЛОДой 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";
}
--------------
Авиатор х#ев
#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";
}
--------------
Авиатор х#ев
NEW 10.02.05 19:02
in Antwort ойМОЛОДой 10.02.05 16:51
Ну вот не читает оно у меня до конца строки.
---------------
Читает [f]gets(), a через [f]scanf надо правильно задавать параметры - там их 5 штук - все читается.
---------------
Читает [f]gets(), a через [f]scanf надо правильно задавать параметры - там их 5 штук - все читается.
NEW 10.02.05 19:07
in Antwort gendy 10.02.05 17:29
на самом деле - почти без разницы.
fscanf может читать текстовый, невыровненый файл,
а для fread нужно будет подгонять двоичный формат, включая последнее число

fscanf может читать текстовый, невыровненый файл,
а для fread нужно будет подгонять двоичный формат, включая последнее число

NEW 10.02.05 19:13
in Antwort digital_pilot 10.02.05 17:29, Zuletzt geändert 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;
}
Да?
class Data
{
public:
Data() {...};
~Data() {...};
protected:
virtual ifstream& operator>>(ifstream&) {...}
virtual ofstream& operator<<(ofstream&) {...}
private:
char FiName[100];
char LaName[100];
int Age;
}
Да?

NEW 10.02.05 19:17
in Antwort ойМОЛОДой 10.02.05 16:27
Пишу в Borland Builder.
------------
Не заметил.
Базу в Аксесе, таблицу с полями, дальше - коннектион к базе и навигация через методы таблицы.
То, об чем ты спрашиваешь - стандартный Си, фактически уже лет 10 как почти мертвое.
------------
Не заметил.
Базу в Аксесе, таблицу с полями, дальше - коннектион к базе и навигация через методы таблицы.
То, об чем ты спрашиваешь - стандартный Си, фактически уже лет 10 как почти мертвое.
NEW 10.02.05 19:19
in Antwort Murr 10.02.05 19:13
ну, если товарищ заодно хочет подзарулить в дебри ООП.... А вообще (если под виндоуз), затея со считыванием текстовых таблиц заданного формата своими самопальными парсерами мне никогда не нравилась. Есть ADO, есть MS Jet - это работа для них :)))
--------------
Авиатор х#ев
--------------
Авиатор х#ев
NEW 10.02.05 19:20
in Antwort digital_pilot 10.02.05 19:19
NEW 10.02.05 19:23
in Antwort Murr 10.02.05 19:20
какая разница. Можно и переменной. Semicolon-separated, tab-separated, CSV - Jet сожрет.
--------------
Авиатор х#ев
--------------
Авиатор х#ев
NEW 10.02.05 19:33
in Antwort digital_pilot 10.02.05 19:23
имелся в виду "не плоский" файл, когда строки не равны по количеству полей и содержат инфу об полях.
строка 1: [ФИГ]фамилия имя год
строка 2: [CAR]зеленая
строка 1: [ФИГ]фамилия имя год
строка 2: [CAR]зеленая
NEW 10.02.05 19:45
in Antwort Murr 10.02.05 19:33
гм... ну это уже другое дело. Поэтому я и написал "заданного формата" ;)
--------------
Авиатор х#ев
--------------
Авиатор х#ев