![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
blackhard |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
мне нужно из некого файла прочитать команду и имя файла которое за ней следует например
Код [autor]=inf.txt проблем с чтением команд нет а вот проблемы с чтением имени файла возникают.1проблема когда в файле несколько команд вроде все работает а когда 1 неработает.2проблема если ему всетаки удается вытащить имя файла он его вытягивает с символом конца строки будет ли влиять это на открытие файла с таким именем?если будет то как это поправить?Вот текст программы
char v[256],*c[20],*n[1],*name[6],*p,*p2;
int i=0,q=0;
if((fz=fopen("fileini.ini","r"))==NULL) printf("error\n");
else
{
while((fgets(v, 255, fz)))
{ ///////читаем построчно
c[i++] = strdup(v);
q++; ////количество строк
}
}
for(i=0;i<q-1;i++) ////пытаюсь работать с отдельными строками
{
if(strstr(c[i],"[inf]"))
{
p=strstr(c[i],"=");
*n=++p;
name[0]=*n;/////суда помещается имя файла
}
if(strstr(c[i],"[autor]"))
{
p=strstr(c[i],"=");
*n=++p;
name[1]=*n;
}
}
вот тут для 2х команд. помогите заставить это работать ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Давай-ка ты полностью тот INI-файл, который читаешь, и с которым проблемы.
|
blackhard |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Перевод строки после "inf.txt" есть? Если есть - то его надо убрать, потому что fgets читает и его тоже в строку, будет лишний символ, который помешает при работе с файлом... Вот так:
char *name[6], *n;
...
int i = 0, j, len;
while(fgets(st, 255, fz)) {
if(st[len = (strlen(st) - 1)] == '\n') {
st[len] = (char)0; // убираем "\n"
}
if(*st) {
c[i++] = strdup(st);
}
}
fclose(fz);
for(j = 0; j < i; ++j) {
if(strstr(c[j], "[inf]")) {
name[0] = (strstr(c[j], "=")) + 1;
}
if(strstr(c[j], "[autor]")) {
n = (strstr(c[j], "=")) + 1;
}
}
printf("%s\n", n);
прекрасно выводится имя файла, причем без разницы, есть перевод строки или нет. |
blackhard |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Перевод строки после "inf.txt" есть? Если есть - то его надо убрать, потому что fgets читает и его тоже в строку, будет лишний символ, который помешает при работе с файлом... Вот так: char *name[6], *n;
...
int i = 0, j, len;
while(fgets(st, 255, fz)) {
if(st[len = (strlen(st) - 1)] == '\n') {
st[len] = (char)0; // убираем "\n"
}
if(*st) {
c[i++] = strdup(st);
}
}
fclose(fz);
for(j = 0; j < i; ++j) {
if(strstr(c[j], "[inf]")) {
name[0] = (strstr(c[j], "=")) + 1;
}
if(strstr(c[j], "[autor]")) {
n = (strstr(c[j], "=")) + 1;
}
}
printf("%s\n", n);
прекрасно выводится имя файла, причем без разницы, есть перевод строки или нет.спасибо огромное ты меня просто спас ![]() |
blackhard |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
блин всеравно вылетает гдето в этом месте
if(*st) {
c[i++] = strdup(st);
}
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Подобные претензии не принимаются. Приводи полный текст программы, и собственно, обрабатываемый файл (лучше всего в архиве) - тогда можно о чем-то говорить. Иначе я тебе скажу, что у меня не вылетает в этом месте и что ты будешь делать? Может, у тебя элементарный выход за границы массива происходит...
|
blackhard |
![]()
Сообщение
#8
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Подобные претензии не принимаются. Приводи полный текст программы, и собственно, обрабатываемый файл (лучше всего в архиве) - тогда можно о чем-то говорить. Иначе я тебе скажу, что у меня не вылетает в этом месте и что ты будешь делать? Может, у тебя элементарный выход за границы массива происходит... вот архив и ini токо эта прога не только с ini работает а еще кучу всего делает поэтому вот участок где работа с ini
FILE*fp,*fz,*fm,*fh,*fi;
int ch,i=0,er=0,k=0,q=0,j,ln;
int ugmanager=INFORMATION_TARASOV;
char *c,x, C[Len],v[256],*c2[20],*name[6],*n,st[254];
................................................................
if(ugmanager & INI_FILE_TARASOV)
{ k=0;
i=0;
ugmanager=INI_FILE_TARASOV;
if((fi=fopen("fileini.ini","r"))==NULL) printf("error\n");
else
{
while((fgets(st, 255, fi)))
{
if(st[ln = (strlen(st) - 1)] == '\n')
{
st[ln] = (char)0; // óáèðàåì "\n"
}
if(*st) {
c[i++] = strdup(st);
}
}
fclose(fi);
for(j=0;j<i;++j)
{
/////////////////////////////////////////////////////////////////
if(strstr(c[j],"[inf]"))
{ k=1;
ugmanager|=ZADANIE_LAB1;
name[0]=(strstr(c[j], "=")) + 1;
}
/////////////////////////////////////////////////////////////////
if(strstr(c[j],"[inf~]"))
{ k=2;
ugmanager&=~ZADANIE_LAB1;
}
//////////////////////////////////////////////////////////////////
if(strstr(c[j],"[autor]"))
{
k=3;
ugmanager|=INFORMATION_TARASOV;
name[1]=(strstr(c[j], "=")) + 1;
}
///////////////////////////////////////////////////////////////////////
if(strstr(c[j],"[autor~]"))
{
k=4;
ugmanager&=~INFORMATION_TARASOV;
}
////////////////////////////////////////////////////////////////////////
if(strstr(c[j],"[infile]"))
{
k=5;
ugmanager|=INPUT_FILE_NAME;
name[2]=(strstr(c[j], "=")) + 1;
}
///////////////////////////////////////////////////////////////////////
if(strstr(c[j],"[infile~]"))
{
k=6;
ugmanager&=~INPUT_FILE_NAME;
}
//////////////////////////////////////////////////////////////////////
if(strstr(c[j],"[help]"))
{
k=7;
ugmanager|=HELP_TARASOV;
name[3]=(strstr(c[j], "=")) + 1;
}
/////////////////////////////////////////////////////////////////////
if(strstr(c[j],"[help~]"))
{
k=8;
ugmanager&=~HELP_TARASOV;
}
////////////////////////////////////////////////////////////////////
if(strstr(c[j],"[sp]"))
{ k=9;
ugmanager|=SPECIFICACI_TARASOV;
name[4]=(strstr(c[j], "=")) + 1;
}
////////////////////////////////////////////////////////////////////
if(strstr(c[j],"[sp]"))
{ k=10;
ugmanager&=~SPECIFICACI_TARASOV;
}
///////////////////////////////////////////////////////////////////
if(strstr(c[j],"[exit]"))
{
k=11;
ugmanager|=EXIT_PROGRAM_TARASOV;
name[5]=(strstr(c[j], "=")) + 1;
}
//////////////////////////////////////////////////////////////////
if(strstr(c[j],"[exit~]"))
{
k=12;
ugmanager&=~EXIT_PROGRAM_TARASOV;
}
if(strstr(c[j],"[menu]"))
{
k=13;
ugmanager|=MENU_TARASOV;
}
if(strstr(c[j],"[menu~]"))
{
k=15;
ugmanager&=~MENU_TARASOV;
}
}
//close(fi);
}
Добавлено через 3 мин. да и чтобы она читала установки из ini надо в командную строку записать /ini_ Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Вот расскажи, на что ты надеешься, записывая:
char *c, ...
// и потом
if(*st) {
c[i++] = strdup(st);
}
? Куда c указывает у тебя??? Ты ж раньше совершенно правильно делал: Цитата char *c[20], ...
|
blackhard |
![]()
Сообщение
#10
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 151 Пол: Мужской Реальное имя: иван Репутация: ![]() ![]() ![]() |
Вот расскажи, на что ты надеешься, записывая: char *c, ...
// и потом
if(*st) {
c[i++] = strdup(st);
}
? Куда c указывает у тебя??? Ты ж раньше совершенно правильно делал: - тогда все отрабатывает. Или ты забыл перевести название переменной в верхний регистр? точно у меняж с там большая буду внемательнее с такими вещами Добавлено через 1 мин. уф... заработало)))) |
Michael_Rybak |
![]()
Сообщение
#11
|
|||
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
|
|||
![]() ![]() |
![]() |
Текстовая версия | 8.08.2025 9:37 |