IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> выдиления имени файла из строки в чем ошибка?, выдиления имени файла из строки
blackhard
сообщение 20.03.2008 10:43
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


мне нужно из некого файла прочитать команду и имя файла которое за ней следует например
Код
[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х команд. помогите заставить это работать smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 10)
volvo
сообщение 20.03.2008 10:50
Сообщение #2


Гость






Давай-ка ты полностью тот INI-файл, который читаешь, и с которым проблемы.
 К началу страницы 
+ Ответить 
blackhard
сообщение 20.03.2008 11:00
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


Цитата(volvo @ 20.03.2008 10:50) *

Давай-ка ты полностью тот INI-файл, который читаешь, и с которым проблемы.

вот с этим.блин чето не прикрепляется файл) ну его содержимое [autor]=inf.txt

Сообщение отредактировано: blackhard - 20.03.2008 11:01
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.03.2008 11:28
Сообщение #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
сообщение 20.03.2008 11:33
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


Цитата(volvo @ 20.03.2008 11:28) *

Перевод строки после "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);

прекрасно выводится имя файла, причем без разницы, есть перевод строки или нет.

спасибо огромное ты меня просто спас good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
blackhard
сообщение 20.03.2008 13:01
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


блин всеравно вылетает гдето в этом месте
if(*st) {
						 c[i++] = strdup(st);
						 }
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.03.2008 13:06
Сообщение #7


Гость






Подобные претензии не принимаются. Приводи полный текст программы, и собственно, обрабатываемый файл (лучше всего в архиве) - тогда можно о чем-то говорить. Иначе я тебе скажу, что у меня не вылетает в этом месте и что ты будешь делать? Может, у тебя элементарный выход за границы массива происходит...
 К началу страницы 
+ Ответить 
blackhard
сообщение 20.03.2008 13:10
Сообщение #8


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


Цитата(volvo @ 20.03.2008 13:06) *

Подобные претензии не принимаются. Приводи полный текст программы, и собственно, обрабатываемый файл (лучше всего в архиве) - тогда можно о чем-то говорить. Иначе я тебе скажу, что у меня не вылетает в этом месте и что ты будешь делать? Может, у тебя элементарный выход за границы массива происходит...

вот архив и 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_


Прикрепленные файлы
Прикрепленный файл  Rar_archive.rar ( 2.78 килобайт ) Кол-во скачиваний: 154
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.03.2008 13:28
Сообщение #9


Гость






Вот расскажи, на что ты надеешься, записывая:

char *c,  ... 
// и потом
if(*st) {
  c[i++] = strdup(st);
}

? Куда c указывает у тебя??? Ты ж раньше совершенно правильно делал:
Цитата
char *c[20], ...
- тогда все отрабатывает. Или ты забыл перевести название переменной в верхний регистр?
 К началу страницы 
+ Ответить 
blackhard
сообщение 20.03.2008 13:37
Сообщение #10


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

Репутация: -  0  +


Цитата(volvo @ 20.03.2008 13:28) *

Вот расскажи, на что ты надеешься, записывая:

char *c,  ... 
// и потом
if(*st) {
  c[i++] = strdup(st);
}

? Куда c указывает у тебя??? Ты ж раньше совершенно правильно делал:
- тогда все отрабатывает. Или ты забыл перевести название переменной в верхний регистр?

точно у меняж с там большая буду внемательнее с такими вещами

Добавлено через 1 мин.
уф... заработало))))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 20.03.2008 14:02
Сообщение #11


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


М
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 8.08.2025 9:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"