Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Поиск значений переменных внутри файла


Автор: ReGeDiT 4.7.2006, 22:44
суть программы:
внутри файла x.x есть блоки с переменными:
Код

[block 1]
string0=5000
string1=1000
string2=2000
string3=3000
string4=4000

[block 2]
string0=5000
string1=3000
string2=1000
string3=3000
string4=4000

[block 3]
string0=5000
string1=2000
string2=1000
string3=3000
string4=4000

в каждом блоке надо сравнить string1 и string2 smile если string1 > string2 сделать их равными и указать в каком блоке мы сделали изменения...
проблема возникает при определении значений string1 и string2 smile. Незнаю как это реализовать.

моя ужасная программа smile :

Код

#include <stdio.h>
#include <conio.h>
#include <string.h>

FILE *fp;

void main(void)
{
char st[7];
char stra[7];
stra[0]='s';
stra[1]='t';
stra[2]='r';
stra[3]='i';
stra[4]='n';
stra[5]='g';
stra[6]='1';
stra[7]='=';
char strb[7];
strb[0]='s';
strb[1]='t';
strb[2]='r';
strb[3]='i';
strb[4]='n';
strb[5]='g';
strb[6]='1';
strb[7]='=';
int vl1,vl2;
fp=fopen("x.x","r");
clrscr();
do {
    fscanf(fp,"%s",&st);
    printf("%s\n",st);
    if (st==stra) { scanf("%d",&vl1); printf("%d\n",vl1); };
    if (st==strb) { scanf("%d",&vl2); printf("%d\n",vl1); };
   }
while (!feof(fp));
getch();
fclose(fp);
}
 

Автор: Fedor 4.7.2006, 23:16
ReGeDiT, во-первых, инициализацию можешь сделать для всей строки целиком.
Во-вторых, строки сравниваются с помощью функции strcmp или strncmp (сравнивает первые n символов, и это тебе вполне может пригодится)
В-третьих, знак равенства по-моему не является разделителем, а значит, прочитается сразу вся строка.


В общем, делаешь так: читаешь всю строку, вырезаешь в ней все до равенства и сравниваешь со "string1". Если это действительно string1, вырезаешь все что после знака равенства и запоминаешь в переменную. (строки копируются функцией strcpy, или strncpy)
Таким же образом находишь string2.
Когда нашел string2, сравниваешь значения с помощью strcmp.


З.Ы. Может, есть красивее решение, но на несвежую голову придумал вот такое простое.  

Автор: Fazil6 4.7.2006, 23:18
если в винде, то используй API
Код

UINT GetPrivateProfileInt(
  LPCTSTR lpAppName,
  LPCTSTR lpKeyName,
  INT nDefault,
  LPCTSTR lpFileName
);


 

Автор: ReGeDiT 4.7.2006, 23:29
Fedor
Oo хм... про идею с первыми символами это неплохо, но мне сказали что такая фишка не прокатит с переменной типа %s smile

Код

int kol = 8;
do {
    fscanf(fp,"%s",&st);
    printf("%s\n",st);
    if (strncmp(st,"string1=",kol)==0) {  /* а как тогда тут считать что мне надо? т.е. значения... */ };
    if (strncmp(st,"string2=",kol)==0) {  /* а как тогда тут считать что мне надо? т.е. значения... */ };
   }


пока что-то вроде этого... smile 

Автор: ReGeDiT 4.7.2006, 23:45
Fedor, ах да, strcmp ведь будет сравнивать только char значения, у меня задача перевести значения после "=" в %d (int) smile
и как вырезать всё ПОСЛЕ "string1="? smile 

Автор: ptr 5.7.2006, 06:53
Ну можешь например так получить значения:
Код

atoi(strstr(string,"=")+1);
  

Автор: Rockie 5.7.2006, 15:39
ptr, точно.

ReGeDiT, вот полный пример
Код
#include<iostream>
#include<conio>

using namespace std;

int main()
{
  char * string = "string1=5000";
  int number = atoi(strstr(string,"=")+1);

  cout<<number;

  getch();
  return 0;
}



Цитата(ReGeDiT @  4.7.2006,  23:29 Найти цитируемый пост)
 но мне сказали что такая фишка не прокатит с переменной типа %s 

похоже рекомендуют использовать строки (string.h). кто может подсказать грамотное преобразование string в int? то есть доделать что-то вроде этого
Код
#include<iostream>
#include<conio>

using namespace std;

int main()
{
  string str = "string1=9000", str_num;
  int number = 0, lenght;

  lenght = str.length();   // длина всей строки

  // вырезаем число от знака '=' и до конца строки
  str_num = str.substr(str.find("=")+1,lenght);

  // пареобразование string str_num в int number

  cout<<number;

  getch();
  return 0;
}


компилятор BCBuilder 6

p.s.: вообще странно но я не нашел ничего вроде StrToInt из AnsiString  но для string. 

Автор: Oleg_Ci 5.7.2006, 17:53
Сочинил програмку, Borland C++ Builder 6.
Код

#include <iostream>
#include <string>
#include <fstream>
#include <stdlib.h>
using namespace std;

int number(string buffer, int pt)
{
  int num=0;
  string s;

  for (;;pt++)
    if ( buffer[pt]>47 && buffer[pt]<58 )
      s+=buffer[pt];
    else break;

  num = atoi(s.c_str());
  return num;
}

int main()
{
  ifstream fin("txt.txt");
  if (!fin.is_open())
    return 1;

  string buffer;
  int pt=0, num1, num2;
  getline(fin, buffer, '\0');
  fin.close();

  while(1)
  {
    pt=buffer.find("block ",pt); if(pt==string::npos)break;
    pt += 6;
    cout<<"block "<<number(buffer, pt)<<endl;

    pt=buffer.find('=',pt); if(pt==string::npos)break;
    pt++;
    num1 = number(buffer, pt);
    pt=buffer.find('=',pt); if(pt==string::npos)break;
    pt++;
    num2 = number(buffer, pt);

    cout<<num1<<endl<<num2<<endl;

    if ( num1 > num2 )
    { /* что-то делаем */; }
  }
  cin.get();
  return 0;
}
  

Автор: ReGeDiT 5.7.2006, 23:15
спасибо огромное... вопрос почти решён )) признаю что я делаю программу под один из серверов игры WoW...
вот что я наделал:
Код

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

FILE *fp,*lg;

void main(void)
{
char st[7];
clrscr();
int vl0,vl1,vl2,dif;
char *name[99];
lg=fopen("log.log","w+");
fprintf(lg,"NM : Item Name\nBP : Buy Price\nSP : Sell Price\nDF : Difference\n\n\n",*name,vl1,vl2,dif);
fclose(lg);
fp=fopen("x.x","r");
do {
    /*************************************/
    fscanf(fp,"%s",&st);
    /*************************************/
    if (strncmp(st,"name=",5)==0)        {
    *name=(strstr(st,"=")+1);
    printf("name=%s\n",*name);             };
//    if (strncmp(st,"name=",5)==0) *name=st;
    /*************************************/
    if (strncmp(st,"[item ",6)==0)       {
    vl0=atoi(strstr(st," ")+1);
    printf("[item %d]\n",vl0);             };
    /*************************************/
    if (strncmp(st,"buyprice=",9)==0)    {
    vl1=atoi(strstr(st,"=")+1);
    printf("buyprice=%d\n",vl1);         };
    /*************************************/
    if (strncmp(st,"sellprice=",10)==0)  {
    vl2=atoi(strstr(st,"=")+1);
    printf("sellprice=%d\n",vl2);
    dif=vl2-vl1;
    if (vl1==vl2)
      { printf("SELLPRICE == BUYPRICE! ADDED TO LOG!\n");
    lg=fopen("log.log","a");
    fprintf(lg,"NM=%s BP=%d SP=%d DF=%d\n",*name,vl1,vl2,dif);
    fclose(lg);
      };
    if (vl2>vl1)
      { printf("SELLPRICE >> BUYPRICE! ADDED TO LOG!\n");
    lg=fopen("log.log","a");
    fprintf(lg,"NM=%s BP=%d SP=%d DF=%d\n",*name,vl1,vl2,dif);
    fclose(lg);
      };                                 };
    /*************************************/
    if (feof(fp)) { printf("We have reached end-of-file\n"); fclose(fp); };
   } while (!feof(fp));
}


файл x.x
Код


#include scripts/extra/items_LF.scp

[item 18]
name=Spirit Of The Wind
class=0
reqlevel=10
quality=1
buyprice=140
sellprice=35
bonding=1
classes=07FFF
model=15748
level=20
races=01FF
stackable=5
material=3
spell=16618 0 -1 0 4 120000

[item 19]
name=Agamaggan's Agility
class=0
reqlevel=10
quality=1
buyprice=140
sellprice=35
bonding=1
classes=07FFF
model=15748
level=20
races=01FF
stackable=5
material=3
spell=17013 0 -1 0 4 120000

[item 20]
name=Agamaggan's Strength
class=0
reqlevel=10
quality=1
buyprice=140
sellprice=35
bonding=1
classes=07FFF
model=15748
level=20
races=01FF
stackable=5
material=3
spell=16612 0 -1 0 4 120000

[item 1000]
name=ShitFuckI
class=0
reqlevel=10
quality=1
buyprice=1001
sellprice=2001
bonding=1
classes=07FFF
model=15748
level=20
races=01FF
stackable=5
material=3
spell=16618 0 -1 0 4 120000

[item 1001]
name=ShitFuckII
class=0
reqlevel=10
quality=1
buyprice=1333
sellprice=1999
bonding=1
classes=07FFF
model=15748
level=20
races=01FF
stackable=5
material=3
spell=16618 0 -1 0 4 120000

[item 1002]
name=ShitFuckIII
class=0
reqlevel=10
quality=1
buyprice=1000
sellprice=1000
bonding=1
classes=07FFF
model=15748
level=20
races=01FF
stackable=5
material=3
spell=16618 0 -1 0 4 120000


в последних трёх спецово даны неправильные значения... НО!!! почемуто в логе потом появляется что-то ужасное smile( вместо названия ужос, также немогу определить [item ID] smile вот 2 вопроса остались...

З.Ы. Начал пробовать перегонять всё под Visual C++ 7.0 Net >> удивился, но обычный импорт кода и программа работоспособна... теперь подскажите или дайте ссылку куданить на создание простейших видов интерфейса... или чтонить типа "Visual С++ для лашей" )) 

Автор: ReGeDiT 5.7.2006, 23:37
ыы и сорри, оверпостинг .... =) но кстати у меня даже после сканирования всего файла и дохождения до EOF (конца...) программа всеравно гоняет по файлу, и ни в какую не хочет закрываццо smile 

Автор: ptr 6.7.2006, 05:55
Код

    if (feof(fp)) { printf("We have reached end-of-file\n"); fclose(fp); };
   } while (!feof(fp));

Ты закрываешь файл до того как проверяешь условие !feof(fp), поэтому оно и не выполняется. Делай fclose(fp) после цикла.

Цитата(Rockie @  5.7.2006,  19:39 Найти цитируемый пост)
похоже рекомендуют использовать строки (string.h). кто может подсказать грамотное преобразование string в int?
p.s.: вообще странно но я не нашел ничего вроде StrToInt из AnsiString  но для string.  

У std::string нет методов для преобразования. Можно сделать так:
Код

atoi(str_num.c_str());
 

Автор: Rockie 6.7.2006, 11:04
Цитата(ptr @  6.7.2006,  05:55 Найти цитируемый пост)
atoi(str_num.c_str());

спасибо, хорошее решение. 

Автор: ReGeDiT 6.7.2006, 15:40
ptr, спасибо ))
осталось нерешено только 2 вопроса:

почему в файле не пишется имя (*name)
Код

SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE >> BUYPRICE || IN = 0 NM = (null) BP = 29 SP = 58 DF = 29
SELLPRICE >> BUYPRICE || IN = 0 NM = (null) BP = 80 SP = 200 DF = 120
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE == BUYPRICE || IN = 0 NM = (null) BP = 1 SP = 1 DF = 0
SELLPRICE >> BUYPRICE || IN = 0 NM = (null) BP = 84490 SP = 96898 DF = 12408

и как сделать определение ID предмета
Код

    if (strncmp(st,"[item",5)==0)       {
    vl0 = atoi(strstr(st,"m")+3);
    printf("[item %d]\n",vl0);            };

smile 

Автор: ReGeDiT 7.7.2006, 01:15
smile неужели никто не знает? smile
и кстати, при выводе, выводится всё до пробела 

Автор: ptr 7.7.2006, 05:55
Цитата(ReGeDiT @  6.7.2006,  19:40 Найти цитируемый пост)
почему в файле не пишется имя (*name)

Старая програма такого файла не генерит. Выложи новый вариант. Кстати а зачем в ней 
Код

char *name[99];
 По-моему можно было обойтись и одним указателем.

Цитата(ReGeDiT @  6.7.2006,  19:40 Найти цитируемый пост)
и как сделать определение ID предмета

Можешь, например, получать из файла так:
Код

fscanf(fp,"[item %d]\n",&id);

или из строки:
Код

sscanf(st,"[item %d]\n",&id);
    

Автор: ReGeDiT 7.7.2006, 13:26
ptr, т.е. получается что fscanf(fp,"[item %d]\n",&id); будет искать строчку [item ]? Если да, то это очень облегчит задачу))

новый код:
Код

/* Основной модуль...
** Проверка items.scp на правильность
*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

FILE *fp, *lg;
int vl0=6, vl1=6, vl2=6, dif=6, i, nmb, id;
char st[99], nm[99], num[99];

void main(void)
{
lg = fopen("log.log","w+");
fprintf(lg,"IN : Item Number\nName : Item Name\nBP : Buy Price\nSP : Sell Price\nDF : Difference\n\n\n");
fclose(lg);
fp = fopen("items.scp","r");
do {
/**************************************************************************************************/
    fscanf(fp,"%s",&st);
/**************************************************************************************************/
    if (strncmp(st,"name=",5)==0)          {
    for (i=0;i<99;i++) { nm[i] = st[i]; };
    printf("%s\n",nm);                     };
/**************************************************************************************************/
    if (strncmp(st,"[item",5)==0)       {
    sscanf(st,"[item %d]\n",&id);
    printf("[item %d]-SS\n",id);
    fscanf(fp,"[item %d]\n",&id);
    printf("[item %d]-FS\n",id);
    /*vl0 = atoi(strstr(st,"m")+3);
    for (i=0;i<99;i++) { if (st[i]=='0') num[i]='0';
             if (st[i]=='1') num[i]='1';
             if (st[i]=='2') num[i]='2';
             if (st[i]=='3') num[i]='3';
             if (st[i]=='4') num[i]='4';
             if (st[i]=='5') num[i]='5';
             if (st[i]=='6') num[i]='6';
             if (st[i]=='7') num[i]='7';
             if (st[i]=='8') num[i]='8';
             if (st[i]=='9') num[i]='9';
               };
    nmb = atoi(num);
    printf("[item %d]\n",vl0);
    printf("[item %d]\n",nmb);*/
    printf("[item %d]\n",id);            };
/**************************************************************************************************/
    if (strncmp(st,"buyprice=",9)==0)   {
    vl1 = atoi(strstr(st,"=")+1);
    printf("buyprice=%d\n",vl1);        };
/**************************************************************************************************/
    if (strncmp(st,"sellprice=",10)==0) {
    vl2 = atoi(strstr(st,"=")+1);
    printf("sellprice=%d\n",vl2);
/**************************************************************************************************/
    dif = vl2-vl1;
/**************************************************************************************************/
    if (vl1==vl2) { printf("SELLPRICE == BUYPRICE! ADDED TO LOG!\n");
            lg = fopen("log.log","a");
            fprintf(lg,"SELLPRICE == BUYPRICE || ");
            fprintf(lg,"IN = %d %s BP = %d SP = %d DF = %d\n",vl0,nm,vl1,vl2,dif);
            fclose(lg);
          };
/**************************************************************************************************/
    if (vl2>vl1) { printf("SELLPRICE >> BUYPRICE! ADDED TO LOG!\n");
           lg = fopen("log.log","a");
           fprintf(lg,"SELLPRICE >> BUYPRICE || ");
           fprintf(lg,"IN = %d %s BP = %d SP = %d DF = %d\n",vl0,nm,vl1,vl2,dif);
           fclose(lg);
         };
                    };
/**************************************************************************************************/
    if (feof(fp)) { printf("All File Was Scanned [EOF]...\n");
            lg = fopen("log.log","a");
            fprintf(lg,"\n\nAll File Was Scanned [EOF]... --- %s -- %d --- %d --- %d ---",num,vl0,nmb,id);
            fclose(lg); };
   } while (!feof(fp));
fclose(fp);
}


всеравно не работает ID становится = 0 smile
З.Ы.: И как всё-таки сделать вывод слов дальше пробела? Например выводится "name=Sandstalker" вместо "name=Sandstalker Gauntlets"... 

Автор: ptr 7.7.2006, 18:45
Код

sscanf(st,"[item %d]\n",&id);

Здесь у тебя st="[item" (см. ниже). Поэтому id как был 0, так им и остался.

Код

fscanf(fp,"%s",&st);

В st заносится всё до пробела, поэтому и выводится так. Читай из файла всю строку полностью. 

Автор: ReGeDiT 7.7.2006, 22:10
Глупый вопрос, но... как? smile)
Вообще извините за такие вопросы но я очень хочу освоить работу с файлами на 100% smile 

Автор: Rockie 7.7.2006, 23:07
Цитата(ReGeDiT @  7.7.2006,  22:10 Найти цитируемый пост)
Глупый вопрос, но... как? )

считать всю строку?
Код
#include<iostream>
#include<conio>

using namespace std;

int main()
{ char buff[81];

  gets(buff);
  printf("%s\n",buff);

  // а по мне уж лучш C++
  string str;
  getline(cin,str);
  cout<<str;

  getch();
  return 0;
}


компилятор BCBuilder 6.0 

Автор: ReGeDiT 7.7.2006, 23:20
а если на Visual C++ 7.0... smile 

Автор: Rockie 7.7.2006, 23:40
проморгал что читать из файла.
Цитата(ReGeDiT @  7.7.2006,  23:20 Найти цитируемый пост)
а если на Visual C++ 7.0...  

на 2005.
Код
// solution-for_vc.cpp : main project file.
#include "stdafx.h"
#include<iostream>
#include<string>
#include<fstream>

using namespace std;

int main()
{  FILE *stream;
   char buff[81];
   
    if( (fopen_s(&stream, "1.txt", "r" ))!=0 )
      printf( "The file '1.txt' was not opened\n" );

   fgets(buff, sizeof(buff), stream);    // read a string from the file
   printf("%s", buff);

   fclose(stream);

   // а по мне уж лучше С++
   ifstream stream2("1.txt");
   string str;
   getline(stream2,str);
   cout<<'\n'<<str;

   stream2.close();

   cin.get();
   return 0;
}

 

Автор: ptr 8.7.2006, 07:05
Цитата(ReGeDiT @  8.7.2006,  02:10 Найти цитируемый пост)
Глупый вопрос, но... как? smile)

Если для C и под Linux, то там есть функция getline(). Под windows я подобной функции не припомню. Можешь, например, использовать функцию для чтения строк (память потом надо чистить):
Код

#define BUF_SIZE 256

char* getline(FILE* stream)
{
    int cur_size=0;
    int i=0;
    char* buf=(char*)malloc(sizeof(char)*BUF_SIZE);
    if(NULL==buf)
    {
    fprintf(stderr,"Couldn't allocate memory!");
    return NULL;
    }
    while(fgets(&buf[cur_size],BUF_SIZE,stream))
    {
    if('\n'==buf[strlen(buf)-1])
    {
        buf[strlen(buf)-1]='\0';
        return buf;
    }
    cur_size+=BUF_SIZE-1;
    buf=(char*)realloc(buf,cur_size+BUF_SIZE);
    if(NULL==buf)
    {
        fprintf(stderr,"Couldn't allocate memory!");
        return NULL;
    }
    }
    return buf;
}

      

Автор: ReGeDiT 9.7.2006, 21:38
ptr спасибо... теперь правда у меня слова обрезаются некоторые )) и выводится та часть слова которая после пробела ))
не мог бы ты уже на моём коде показать как это всё должно работать, чтобы я наконец понял в чём проблема... все комменты есть )
Код

/*************************************** 
** Основной модуль...                 **
** Проверка items.scp на правильность **
***************************************/

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <istream>
#define BUF_SIZE 256

char *getline(FILE* stream) // Proc by ptr
{   int cur_size=0;
    int i=0;
    char* buf=(char*)malloc(sizeof(char)*BUF_SIZE);
    if(NULL==buf)
    {
    fprintf(stderr,"Couldn't allocate memory!");
    return NULL;
    }
    while(fgets(&buf[cur_size],BUF_SIZE,stream))
    {
    if('\n'==buf[strlen(buf)-1])
    {
        buf[strlen(buf)-1]='\0';
        return buf;
    }
    cur_size+=BUF_SIZE-1;
    buf=(char*)realloc(buf,cur_size+BUF_SIZE);
    if(NULL==buf)
    {
        fprintf(stderr,"Couldn't allocate memory!");
        return NULL;
    }
    }
    return buf;
}

FILE *fp, *lg;
int vl0=6, vl1=6, vl2=6, dif=6, i, nmb, id;
char st[99], nm[99], num[99];
char *dd;

void main(void)
{
lg = fopen("log.log","w+");
fprintf(lg,"IN : Item Number\nName : Item Name\nBP : Buy Price\nSP : Sell Price\nDF : Difference\n\n\n");
fclose(lg);
fp = fopen("items.scp","r");
do {
/**************************************************************************************************/
    fscanf(fp,"%s",&st);
    dd = getline(fp);
    /*sscanf(st,"[item %d]\n",&id);
    printf("[item %d]-SS\n",id);
    fscanf(fp,"[item %d]\n",&id);
    printf("[item %d]-FS\n",id);/*
/**************************************************************************************************/
/*    if (strncmp(st,"name=",5)==0)          {
    for (i=0;i<99;i++) { nm[i] = st[i]; };
    printf("%s\n",nm);                     };*/
    if (strncmp(st,"name=",5)==0)          {
    for (i=0;i<=99;i++) { nm[i] = dd[i]; }; // по другому ну никак не придумаю :(
    printf("%s\n",nm);                     };
/**************************************************************************************************/
    if (strncmp(dd,"[",1)==0)       { // условие не выполняется :(
    //sscanf(st,"[item %d]\n",&id);
    //printf("[item %d]-SS\n",id);
    //fscanf(fp,"[item %d]\n",&id);
    //printf("[item %d]-FS\n",id);
    vl0 = 345; // Тест на работает ли вообще... и как выяснилось условие не выполняется
    vl0 = atoi(strstr(dd,"m")+3);
/*    for (i=0;i<99;i++) { if (st[i]=='0') num[i]='0';
             if (st[i]=='1') num[i]='1';
             if (st[i]=='2') num[i]='2';
             if (st[i]=='3') num[i]='3';
             if (st[i]=='4') num[i]='4';
             if (st[i]=='5') num[i]='5';
             if (st[i]=='6') num[i]='6';
             if (st[i]=='7') num[i]='7';
             if (st[i]=='8') num[i]='8';
             if (st[i]=='9') num[i]='9';
               };
    nmb = atoi(num);
  */  printf("[item %d]\n",vl0);
    /*printf("[item %d]\n",nmb);
    printf("[item %d]-ID\n",id);*/            };
/**************************************************************************************************/
    if (strncmp(st,"buyprice=",9)==0)   {  // тут всё работает 100%
    vl1 = atoi(strstr(st,"=")+1);          // тут всё работает 100%
    printf("buyprice=%d\n",vl1);        }; // тут всё работает 100%
/**************************************************************************************************/
    if (strncmp(st,"item",4)==0)   {  // сделал проверку ещё раз, на всякий случай, но всёравно не работает
    vl0 = atoi(strstr(st," ")+1);     // 0%
    printf("item=%d\n",vl0);       }; // 0%
/**************************************************************************************************/
    if (strncmp(st,"sellprice=",10)==0) { // Работает 100%
    vl2 = atoi(strstr(st,"=")+1);
    printf("sellprice=%d\n",vl2);
    dif = vl2-vl1;
    if ((vl1==vl2)&&(vl1!=1)&&(vl2!=1)) { printf("SELLPRICE == BUYPRICE! ADDED TO LOG!\n");
                                          lg = fopen("log.log","a");
                                          fprintf(lg,"SELLPRICE == BUYPRICE || ");
                                          fprintf(lg,"IN = %d-%d-%d %s BP = %d SP = %d DF = %d\n",vl0,nmb,id,nm,vl1,vl2,dif);
                                          fclose(lg);
                                        };
    if (vl2>vl1) { printf("SELLPRICE >> BUYPRICE! ADDED TO LOG!\n");
                   lg = fopen("log.log","a");
                   fprintf(lg,"SELLPRICE >> BUYPRICE || ");
                   fprintf(lg,"IN = %d-%d-%d %s BP = %d SP = %d DF = %d\n",vl0,nmb,id,nm,vl1,vl2,dif);
                   fclose(lg);
                 };
                                        };
/**************************************************************************************************/
    if (feof(fp)) { printf("All File Was Scanned [EOF]...\n");
            lg = fopen("log.log","a");
            fprintf(lg,"\n\nAll File Was Scanned [EOF]... %d",vl0);
            fclose(lg); };
   } while (!feof(fp));
fclose(fp);
}

// ThX to ptr, Rockie, Олег4, Fedor, Fazil6 and all who i forgot ^^
 

Автор: Rockie 10.7.2006, 12:37
Цитата(ReGeDiT @  9.7.2006,  21:38 Найти цитируемый пост)
 все комменты есть )

Цитата(ReGeDiT @  9.7.2006,  21:38 Найти цитируемый пост)
 if (strncmp(st,"buyprice=",9)==0)   {  // тут всё работает 100%    
    vl1 = atoi(strstr(st,"=")+1);          // тут всё работает 100%    
    printf("buyprice=%d\n",vl1);        }; // тут всё работает 100%

Цитата(ReGeDiT @  9.7.2006,  21:38 Найти цитируемый пост)
l0 = atoi(strstr(st," ")+1);     // 0%

=)
ReGeDiT, дай содержимое файла log.log или еще какого там и напиши точно что эта программа делает. 

Автор: ReGeDiT 10.7.2006, 13:24
=)
log.log :
Код


~items.scp~

IN : Item Number
Name : Item Name
BP : Buy Price
SP : Sell Price
DF : Difference
VR : Variable


SELLPRICE >> BUYPRICE || IN = 0  Shoes BP = 29 SP = 58 DF = 29
SELLPRICE >> BUYPRICE || IN = 0  Linen Bandage BP = 80 SP = 200 DF = 120
UNKNOWN      VARIABLE || IN = 0  Sash VR = variaaion=1022
UNKNOWN      VARIABLE || IN = 0  Chestpiece VR = maaerial=8
UNKNOWN      VARIABLE || IN = 0  Chicken VR = lot=10620
UNKNOWN      VARIABLE || IN = 0  VR = bayprice=87634
UNKNOWN      VARIABLE || IN = 0  Helm VR = variarion=1811
UNKNOWN      VARIABLE || IN = 0  Commander's Chain Pauldrons VR = bayprice=64573
SELLPRICE >> BUYPRICE || IN = 0  Gauntlets BP = 84490 SP = 96898 DF = 12408


All File Was Scanned [EOF]...


новый код :
Код

/***************************
** Модуль проверки файлов **
***************************/

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define BUF_SIZE 256

char* getline(FILE* stream)
{
    int cur_size=0;
    char* buf=(char*)malloc(sizeof(char)*BUF_SIZE);
    if (NULL==buf) { fprintf(stderr,"Couldn't allocate memory!");
             return NULL;
           }
    while(fgets(&buf[cur_size],BUF_SIZE,stream))
      { if ('\n'==buf[strlen(buf)-1])
      {
       buf[strlen(buf)-1]='\0';
       return buf;
      }
    cur_size+=BUF_SIZE-1;
    buf=(char*)realloc(buf,cur_size+BUF_SIZE);
    if (NULL==buf)
      {
       fprintf(stderr,"Couldn't allocate memory!");
       return NULL;
      }
      }
    return buf;
}

/***************************************
** Проверка items.scp на правильность **
***************************************/

FILE *fp, *lg;
int vl0=0, vl1=0, vl2=0, dif, i, nmb, id;
char st[99], *nm;

void main(void)
{
lg = fopen("log.log","wt");
fprintf(lg,"\n~items.scp~\n\nIN : Item Number\nName : Item Name\nBP : Buy Price\nSP : Sell Price\nDF : Difference\nVR : Variable\n\n\n");
fclose(lg);
fp = fopen("items.scp","rt");
do {
/**************************************************************************************************/
    fscanf(fp,"%s",&st);
/**************************************************************************************************/
    if (strncmp(st,"name=",5)==0) {  // Работает на 50% - Только половина имени
    nm = getline(fp);                // Работает на 50% - Только половина имени
    printf("%s\n",nm);            }; // Работает на 50% - Только половина имени
/**************************************************************************************************/
    sscanf(getline(fp),"[item %d]\n",&vl0); // 0%
/**************************************************************************************************/
    if (strncmp(st,"buyprice=",9)==0)   {  // тут всё работает 100%
    vl1 = atoi(strstr(st,"=")+1);          // тут всё работает 100%
    printf("buyprice=%d\n",vl1);        }; // тут всё работает 100%
/**************************************************************************************************/
    if (strncmp(st,"sellprice=",10)==0) { // Работает 100%
    vl2 = atoi(strstr(st,"=")+1);
    printf("sellprice=%d\n",vl2);
    dif = vl2-vl1;
    if ((vl1==vl2)&&(vl1!=1)&&(vl2!=1)) { printf("SELLPRICE == BUYPRICE! ADDED TO LOG!\n");
                                          lg = fopen("log.log","at");
                                          fprintf(lg,"SELLPRICE == BUYPRICE || IN = %d %s BP = %d SP = %d DF = %d\n",vl0,nm,vl1,vl2,dif);
                                          fclose(lg);
                                        };
    if (vl2>vl1) { printf("SELLPRICE >> BUYPRICE! ADDED TO LOG!\n");
               lg = fopen("log.log","at");
               fprintf(lg,"SELLPRICE >> BUYPRICE || IN = %d %s BP = %d SP = %d DF = %d\n",vl0,nm,vl1,vl2,dif);
               fclose(lg);
             };
                                };
/**************************************************************************************************/
    if ((strncmp(st,"bonding=",8)!=0)&& // Работает 100%
        (strncmp(st,"buyprice=",9)!=0)&&
        (strncmp(st,"class=",6)!=0)&&
        (strncmp(st,"classes=",8)!=0)&&
        (strncmp(st,"description=",12)!=0)&&
        (strncmp(st,"language=",9)!=0)&&
        (strncmp(st,"level=",6)!=0)&&
        (strncmp(st,"material=",9)!=0)&&
        (strncmp(st,"maxcount=",9)!=0)&&
        (strncmp(st,"model=",6)!=0)&&
        (strncmp(st,"name=",5)!=0)&&
        (strncmp(st,"pagetext=",9)!=0)&&
        (strncmp(st,"quality=",8)!=0)&&
        (strncmp(st,"races=",6)!=0)&&
        (strncmp(st,"reqlevel=",9)!=0)&&
        (strncmp(st,"sellprice=",10)!=0)&&
        (strncmp(st,"//",2)!=0)&&
        (strncmp(st,"#include",8)!=0)&&
        (strncmp(st,"[item",5)!=0)&&
        (strncmp(st,"damage=",7)!=0)&&
        (strncmp(st,"delay=",6)!=0)&&
        (strncmp(st,"durability=",11)!=0)&&
        (strncmp(st,"inventorytype=",14)!=0)&&
        (strncmp(st,"sheath=",7)!=0)&&
        (strncmp(st,"resistance1=",12)!=0)&&
        (strncmp(st,"resistance2=",12)!=0)&&
        (strncmp(st,"resistance3=",12)!=0)&&
        (strncmp(st,"resistance4=",12)!=0)&&
        (strncmp(st,"resistance5=",12)!=0)&&
        (strncmp(st,"resistance6=",12)!=0)&&
        (strncmp(st,"resistance7=",12)!=0)&&
        (strncmp(st,"resistances=",12)!=0)&&                    // ???
        (strncmp(st,"bonus=",6)!=0)&&
        (strncmp(st,"questid=",8)!=0)&&
        (strncmp(st,"block=",6)!=0)&&
        (strncmp(st,"part=",5)!=0)&&
        (strncmp(st,"flags=",6)!=0)&&
        (strncmp(st,"extra=",6)!=0)&&                           // ???
        (strncmp(st,"variation=",10)!=0)&&
        (strncmp(st,"containerslots=",15)!=0)&&
        (strncmp(st,"subclass=",9)!=0)&&
        (strncmp(st,"spell=",6)!=0)&&
        (strncmp(st,"skill=",6)!=0)&&
        (strncmp(st,"skillrank=",10)!=0)&&
        (strncmp(st,"questscript=",12)!=0)&&
        (strncmp(st,"starts_quests=",14)!=0)&&                  // 1 ?
        (strncmp(st,"startquest=",11)!=0)&&                     // 1 ?
        (strncmp(st,"ammotype=",9)!=0)&&                        // ???
        (strncmp(st,"oldclass=",9)!=0)&&                        // ???
        (strncmp(st,"pagematerial=",13)!=0)&&                   // ???
        (strncmp(st,"loot=",5)!=0)&&
        (strncmp(st,"lockid=",7)!=0)&&                          // ???
        (strncmp(st,"finishes_quests=",16)!=0)&&
        (strncmp(st,"set=",4)!=0)&&
        (strncmp(st,"questid2=",9)!=0)&&                        // ???
        (strncmp(st,"spellreq=",9)!=0)&&
        (strncmp(st,"pvprankreq=",11)!=0)&&
        (strncmp(st,"stackable=",10)!=0)) { lg = fopen("log.log","at");
                                            printf("UNKNOWN      VARIABLE! ADDED TO LOG!\n");
                                            fprintf(lg,"UNKNOWN      VARIABLE || IN = %d %s VR = %s\n",vl0,nm,st);
                                            fclose(lg);
                                          };
/**************************************************************************************************/
    if (feof(fp)) { printf("All File Was Scanned [EOF]...\n");
                    lg = fopen("log.log","at");
                    fprintf(lg,"\n\nAll File Was Scanned [EOF]...");
                    fclose(lg);
                  };
   }
while (!feof(fp));
fclose(fp);
}

/*********************************************************************
** ThX to ptr, Rockie, Олег4, Fedor, Fazil6 and all who i forgot ^^ **
*********************************************************************/


проблема в :

Код

SELLPRICE >> BUYPRICE || IN = 0  Gauntlets BP = 84490 SP = 96898 DF = 12408


должно быть как
Код

SELLPRICE >> BUYPRICE || IN = 0  Sandstalker Gauntlets BP = 84490 SP = 96898 DF = 12408

smile

и IN = 0 никак не определит [item ID] ... всеравно 0... smile 

т.е. в идеале всё должно быть как

Код

SELLPRICE >> BUYPRICE || IN = 20477 Sandstalker Gauntlets BP = 84490 SP = 96898 DF = 12408


то что в items.scp >>
Код

[item 20477]
bonus=7 9
bonding=2
buyprice=84490
class=4
classes=07FF
durability=40
inventorytype=10
level=62
material=5
model=32874
name=Sandstalker Gauntlets
quality=3
races=0FF
reqlevel=57
resistance1=308
resistance4=20
sellprice=96898
stackable=1
subclass=3


ух много я напесал ^^  

Автор: ptr 10.7.2006, 15:16
Я немного поправил твою программу (исправил ошибки, да немного упростил). Кривовато конечно получилось, но для примера сойдёт. Теперь, вроде, всё считывается и выводится нормально.
Код

/*************************************** 
** Îñíîâíîé ìîäóëü...                 **
** Ïðîâåðêà items.scp íà ïðàâèëüíîñòü **
***************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#define BUF_SIZE 256
#define NAME_LEN 99

char *getline(FILE* stream) // Proc by ptr
{   
    int cur_size=0;
    int i=0;
    char* buf=(char*)malloc(sizeof(char)*BUF_SIZE);
    if(NULL==buf)
    {
        return NULL;
    }
    while(fgets(&buf[cur_size],BUF_SIZE,stream))
    {
        if('\n'==buf[strlen(buf)-1])
        {
            buf[strlen(buf)-1]='\0';
            return buf;
        }
        cur_size+=BUF_SIZE-1;
        buf=(char*)realloc(buf,cur_size+BUF_SIZE);
        if(NULL==buf)
        {
            return NULL;
        }
    }
    return buf;
}

void printToLog(FILE* log, int buyPrice, int sellPrice, int id, char *name)
{
    //if(NULL==name){}
    int dif = sellPrice - buyPrice;
    if(0==dif)
    {
        fprintf(log,"SELLPRICE == BUYPRICE || ");
    }
    else
    {
        fprintf(log,"SELLPRICE >> BUYPRICE || ");
    }
    fprintf(log,"IN = %d %s BP = %d SP = %d DF = %d\n", id, name, buyPrice, sellPrice, dif);

    printf("Name: %s\n", name);
    printf("ID: %d\n",id);
    printf("buyPrice: %d\n",buyPrice);
    printf("sellPrice: %d\n\n",sellPrice);
}


int main(void)
{
    extern int errno;
    FILE *input = NULL, *log = NULL;
    int buyPrice=0, sellPrice=0, id=0;
    char name[NAME_LEN+1];
    void *ptr = NULL;//èñïîëüçóåòñÿ äëÿ ïðîñòîòû çàïèñè
    char *buf = NULL;//áóôåð äëÿ ÷òåíèÿ
    char allValues = 0;//åñëè ìû ñ÷èòàëè âñå äàííûå(=1), òî ïèøåì èõ â ëîã.
    
    log = fopen("log.log","w+");
    input = fopen("items.scp","r");

    if(NULL==log || NULL==input)
    {
        fprintf(stderr,"Couldn't open file - %s.", strerror(errno));
        exit(EXIT_FAILURE);
    }

    fprintf(log,"IN : Item Number\nName : Item Name\nBP : Buy Price\nSP : Sell Price\nDF : Difference\n\n\n");
    fclose(log);
    log = fopen("log.log", "a");

    buf=getline(input);// ñ÷èòûâàíèå ïåðâîé ñòðîêè #include scripts/extra/items_LF.scp

    if(NULL==buf)//ïðîâåðêà íà îøèáêè
    {
        fclose(log);
        fclose(input);
        exit(EXIT_FAILURE);
    }

    while(!feof(input))
    {
        if(1==allValues)//åñëè =1, òî ïèøåì â ëîã (òàê ëó÷øå íå äåëàòü)
        {
            printToLog(log, buyPrice, sellPrice, id, name);
            allValues = 0;
        }

        if(NULL==(buf=getline(input)))//ñ÷èòûâàåì èç ôàéëà
        {
            fclose(log);
            fclose(input);
            exit(EXIT_FAILURE);
        }

        if(0==strncmp("[item",buf,strlen("[item")))
        {
            sscanf(buf,"[item %d]",&id);
            //continue;
        }

        if(0==strncmp("name",buf, strlen("name")))
        {
            ptr = strstr(buf,"=")+1;
            strncpy(name, ptr, NAME_LEN);//íåêîððåòíî, íî åñëè äëèíà èìåíè <99 ñèìâîëîâ :), òî ñîéä¸ò
            //continue;
        }

        if(0==strncmp("buyprice",buf,strlen("buyprice")))
        {
            ptr = strstr(buf,"=")+1;
            buyPrice = atoi(ptr);
            //continue;
        }

        if(0==strncmp("sellprice",buf,strlen("sellprice")))
        {
            ptr = strstr(buf,"=")+1;
            sellPrice = atoi(ptr);
            allValues=1;
            //continue;
        }
        free(buf);//íå çàáûâàé ÷èñòèòü ïàìÿòü
    }

    printf("All File Was Scanned [EOF]...\n");
    fprintf(log,"\n\nAll File Was Scanned [EOF]... ");

    //óõîäÿ ãàñèì ñâåò
    fclose(input);
    fclose(log);

    system("PAUSE");
    return 0;
}
 

Автор: ReGeDiT 10.7.2006, 16:21
ptr, все комменты на арабском smile( ничо не понять ^^
З.Ы. а не мог ли бы ты исправить конкретно в моей программе (пост выше)... а то мне очень долго разбирацо в твоей ибо код написан в очень сложной манере... но спасибо всеравно ))

Добавлено @ 16:33 
если это ");// ñ÷èòûâàíèå ïåðâîé ñòðîêè #include scripts/extra/items_LF.scp" переводится как "что такое #include scripts/extra/items_LF.scp" то это значит, что проверяемый файл также должен включать в себя другой файл... т.е. неплохо было-бы его подгрузить ))) но как это сделать я пока не задумывался 

Автор: ReGeDiT 10.7.2006, 16:42
и почемуто у меня если в любое время делать 

переменная = getline(fp);

то программа выводит в логе полную чушь, прямо мистика smile... там что-то про очистку памяти было? )) 

Автор: ReGeDiT 10.7.2006, 17:41
ыыы сорри снова... ptr а зачем ты в своём коде сделал ошибку? спецово? =) защита от дурака? smile) так или иначе, в логе пишется чушь )) 

Автор: ptr 11.7.2006, 09:06
Цитата(ReGeDiT @  10.7.2006,  21:41 Найти цитируемый пост)
ыыы сорри снова... ptr а зачем ты в своём коде сделал ошибку? спецово? =) защита от дурака? smile) так или иначе, в логе пишется чушь ))  

Что за ошибка? У меня всё нормально работает.


Цитата(ReGeDiT @  10.7.2006,  20:42 Найти цитируемый пост)
и почемуто у меня если в любое время делать 

переменная = getline(fp);

то программа выводит в логе полную чушь, прямо мистика smile... там что-то про очистку памяти было? ))  

getline() считывает из файла всю строку полностью, при этом выделяет память под неё (читай всё getline, fscanf здесь вообще не нужен). После использования строки делай free().

Что за чушь то?

Цитата(ReGeDiT @  10.7.2006,  20:21 Найти цитируемый пост)
если это ");// ñ÷èòûâàíèå ïåðâîé ñòðîêè #include scripts/extra/items_LF.scp" переводится как "что такое #include scripts/extra/items_LF.scp" то это значит, что проверяемый файл также должен включать в себя другой файл... 

Ну что-то же я с этой строкой делать то должен был.

Цитата(ReGeDiT @  10.7.2006,  20:21 Найти цитируемый пост)
ptr, все комменты на арабском smile( ничо не понять ^^

Ты это о чём?

Цитата(ReGeDiT @  10.7.2006,  20:21 Найти цитируемый пост)
З.Ы. а не мог ли бы ты исправить конкретно в моей программе (пост выше)... а то мне очень долго разбирацо в твоей ибо код написан в очень сложной манере... но спасибо всеравно ))

Ну не знаю что ты сложного нашёл.
Вот твой код:
Код

char* buf;
...
do {
buf=getline(fp);//здесь не нужен fscanf
    if (strncmp(buf,"name=",5)==0) {
    strncpy(nm, strstr(buf,"=")+1, 99);
                            }
....
    sscanf(buf,"[item %d]",&vl0);
    free(buf);
}
while()
  

Автор: ReGeDiT 11.7.2006, 10:33
ptr у меня все твои комментарии на непонятной кодировке типа "Аоеоаоеоаеоаоееаоеа" (не KOI8-R) smile в прошлой программе

ошибка вот эта
Код

    void *ptr = NULL;//èñïîëüçóåòñÿ äëÿ ïðîñòîòû çàïèñè
    char *buf = NULL;//áóôåð äëÿ ÷òåíèÿ

smile а надо 
Код

    char *ptr = NULL;//èñïîëüçóåòñÿ äëÿ ïðîñòîòû çàïèñè
    char *buf = NULL;//áóôåð äëÿ ÷òåíèÿ


также я сделал всё как ты сказал, всё компилируется... но в винде потом выскакивает критическая ошибка smile
Код

/***************************
** Модуль проверки файлов **
***************************/

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

#define BUF_SIZE 256
#define NAME_LEN 99

char* getline(FILE* stream)
{
    int cur_size=0;
    char* buf=(char*)malloc(sizeof(char)*BUF_SIZE);
    if (NULL==buf) { fprintf(stderr,"Couldn't allocate memory!");
             return NULL;
           }
    while(fgets(&buf[cur_size],BUF_SIZE,stream))
      { if ('\n'==buf[strlen(buf)-1])
      {
       buf[strlen(buf)-1]='\0';
       return buf;
      }
    cur_size+=BUF_SIZE-1;
    buf=(char*)realloc(buf,cur_size+BUF_SIZE);
    if (NULL==buf)
      {
       fprintf(stderr,"Couldn't allocate memory!");
       return NULL;
      }
      }
    return buf;
}

/***************************************
** Проверка items.scp на правильность **
***************************************/

FILE *fp, *lg;
int vl0 = 0, vl1 = 0, vl2 = 0, dif = 0, i = 0, nmb = 0, id = 0;
char st[99], *nm;
char* buf = NULL;

void main(void)
{
lg = fopen("log.log","wt");
fprintf(lg,"WoWCHK v0.2 Auto-Generated LOG-File\n\n~items.scp~\n\nID : Item Number\nName : Item Name\nBP : Buy Price\nSP : Sell Price\nDF : Difference\nVR : Variable\n\n");
fclose(lg);
fp = fopen("items.scp","rt");
do {
/**************************************************************************************************/
    buf = getline(fp);
/**************************************************************************************************/
    if (strncmp(buf,"[item",5)==0) { sscanf(buf,"[item %d]",&vl0); };
    printf("[item %d]\n",vl0);
/**************************************************************************************************/
    if (strncmp(buf,"name=",5)==0) { strncpy(nm,strstr(buf,"=")+1,99); };
    printf("name=%s]\n",nm);
/**************************************************************************************************/
    if (strncmp(buf,"buyprice=",9)==0)   {  // тут всё работает 100%
    vl1 = atoi(strstr(buf,"=")+1);          // тут всё работает 100%
    printf("buyprice=%d\n",vl1);        }; // тут всё работает 100%
/**************************************************************************************************/
    if (strncmp(buf,"sellprice=",10)==0) { // Работает 100%
    vl2 = atoi(strstr(buf,"=")+1);
    printf("sellprice=%d\n",vl2);
    dif = vl2-vl1;
    if ((vl1==vl2)&&(vl1!=1)&&(vl2!=1)) { printf("SELLPRICE == BUYPRICE! ADDED TO LOG!\n");
                                          lg = fopen("log.log","at");
                                          fprintf(lg,"SELLPRICE == BUYPRICE || IN = %d %s BP = %d SP = %d DF = %d\n",vl0,nm,vl1,vl2,dif);
                                          fclose(lg);
                                        };
    if (vl2>vl1) { printf("SELLPRICE >> BUYPRICE! ADDED TO LOG!\n");
               lg = fopen("log.log","at");
               fprintf(lg,"SELLPRICE >> BUYPRICE || IN = %d %s BP = %d SP = %d DF = %d\n",vl0,nm,vl1,vl2,dif);
               fclose(lg);
             };
                                };
/**************************************************************************************************/
    if ((strncmp(buf,"bonding=",8)!=0)&& // Работает 100%
        (strncmp(buf,"buyprice=",9)!=0)&&
        (strncmp(buf,"class=",6)!=0)&&
        (strncmp(buf,"classes=",8)!=0)&&
        (strncmp(buf,"description=",12)!=0)&&
        (strncmp(buf,"language=",9)!=0)&&
        (strncmp(buf,"level=",6)!=0)&&
        (strncmp(buf,"material=",9)!=0)&&
        (strncmp(buf,"maxcount=",9)!=0)&&
        (strncmp(buf,"model=",6)!=0)&&
        (strncmp(buf,"name=",5)!=0)&&
        (strncmp(buf,"pagetext=",9)!=0)&&
        (strncmp(buf,"quality=",8)!=0)&&
        (strncmp(buf,"races=",6)!=0)&&
        (strncmp(buf,"reqlevel=",9)!=0)&&
        (strncmp(buf,"sellprice=",10)!=0)&&
        (strncmp(buf,"//",2)!=0)&&
        (strncmp(buf,"#include",8)!=0)&&
        (strncmp(buf,"[item",5)!=0)&&
        (strncmp(buf,"damage=",7)!=0)&&
        (strncmp(buf,"delay=",6)!=0)&&
        (strncmp(buf,"durability=",11)!=0)&&
        (strncmp(buf,"inventorytype=",14)!=0)&&
        (strncmp(buf,"sheath=",7)!=0)&&
        (strncmp(buf,"resistance1=",12)!=0)&&
        (strncmp(buf,"resistance2=",12)!=0)&&
        (strncmp(buf,"resistance3=",12)!=0)&&
        (strncmp(buf,"resistance4=",12)!=0)&&
        (strncmp(buf,"resistance5=",12)!=0)&&
        (strncmp(buf,"resistance6=",12)!=0)&&
        (strncmp(buf,"resistance7=",12)!=0)&&
        (strncmp(buf,"resistances=",12)!=0)&&                    // ???
        (strncmp(buf,"bonus=",6)!=0)&&
        (strncmp(buf,"questid=",8)!=0)&&
        (strncmp(buf,"block=",6)!=0)&&
        (strncmp(buf,"part=",5)!=0)&&
        (strncmp(buf,"flags=",6)!=0)&&
        (strncmp(buf,"extra=",6)!=0)&&                           // ???
        (strncmp(buf,"variation=",10)!=0)&&
        (strncmp(buf,"containerslots=",15)!=0)&&
        (strncmp(buf,"subclass=",9)!=0)&&
        (strncmp(buf,"spell=",6)!=0)&&
        (strncmp(buf,"skill=",6)!=0)&&
        (strncmp(buf,"skillrank=",10)!=0)&&
        (strncmp(buf,"questscript=",12)!=0)&&
        (strncmp(buf,"starts_quests=",14)!=0)&&                  // 1 ?
        (strncmp(buf,"startquest=",11)!=0)&&                     // 1 ?
        (strncmp(buf,"ammotype=",9)!=0)&&                        // ???
        (strncmp(buf,"oldclass=",9)!=0)&&                        // ???
        (strncmp(buf,"pagematerial=",13)!=0)&&                   // ???
        (strncmp(buf,"loot=",5)!=0)&&
        (strncmp(buf,"lockid=",7)!=0)&&                          // ???
        (strncmp(buf,"finishes_quests=",16)!=0)&&
        (strncmp(buf,"set=",4)!=0)&&
        (strncmp(buf,"questid2=",9)!=0)&&                        // ???
        (strncmp(buf,"spellreq=",9)!=0)&&
        (strncmp(buf,"pvprankreq=",11)!=0)&&
        (strncmp(buf,"stackable=",10)!=0)) { lg = fopen("log.log","at");
                                             printf("UNKNOWN      VARIABLE! ADDED TO LOG!\n");
                                             fprintf(lg,"UNKNOWN      VARIABLE || IN = %d %s VR = %s\n",vl0,nm,st);
                                             fclose(lg);
                                           };
/**************************************************************************************************/
    free(buf);
    if (feof(fp)) { printf("All File Was Scanned [EOF]...\n");
                    lg = fopen("log.log","at");
                    fprintf(lg,"\n\nAll File Was Scanned [EOF]...");
                    fclose(lg);
                  };
   }
while (!feof(fp));
fclose(fp);
}

/*********************************************************************
** ThX to ptr, Rockie, Олег4, Fedor, Fazil6 and all who i forgot ^^ **
*********************************************************************/
 

Автор: ptr 11.7.2006, 13:39
Странно, но у меня все комментарии отображаются нормально (win1251, koi8-r).

Возможно, ты и прав лучше char* (как-то просмотрел).

Цитата(ReGeDiT @  11.7.2006,  14:33 Найти цитируемый пост)
также я сделал всё как ты сказал, всё компилируется... но в винде потом выскакивает критическая ошибка smile

А кто будет выделять память под nm? Поменяй char *nm, например, на char nm[100]. 

Автор: ReGeDiT 11.7.2006, 13:57
огромное спасибо! smile правда теперь у меня всё стало Unknown Variable ^^

log.log:
Код

UNKNOWN      VARIABLE || IN = 0  VR = 
UNKNOWN      VARIABLE || IN = 0  VR = 
UNKNOWN      VARIABLE || IN = 0  VR = 
UNKNOWN      VARIABLE || IN = 0  VR = 
UNKNOWN      VARIABLE || IN = 0  VR = 
UNKNOWN      VARIABLE || IN = 0  VR = 
UNKNOWN      VARIABLE || IN = 1 Welcome Note VR = 
UNKNOWN      VARIABLE || IN = 2 1 Silver! VR = 
UNKNOWN      VARIABLE || IN = 3 10 Silver! VR = 
UNKNOWN      VARIABLE || IN = 4 1 Gold! VR = 
UNKNOWN      VARIABLE || IN = 5 10 Gold! VR = 
UNKNOWN      VARIABLE || IN = 6 100 Gold! VR = 
UNKNOWN      VARIABLE || IN = 7 1000 Gold! VR = 
UNKNOWN      VARIABLE || IN = 21 Purple Token VR = 
UNKNOWN      VARIABLE || IN = 22 Green Token VR = 
UNKNOWN      VARIABLE || IN = 23 Yellow Token VR = 
UNKNOWN      VARIABLE || IN = 24 White Token VR = 
UNKNOWN      VARIABLE || IN = 25 Worn Shortsword VR = 
UNKNOWN      VARIABLE || IN = 35 Bent Staff VR = 
UNKNOWN      VARIABLE || IN = 36 Worn Mace VR = 
UNKNOWN      VARIABLE || IN = 37 Worn Axe VR = 
UNKNOWN      VARIABLE || IN = 38 Recruit's Shirt VR = 
UNKNOWN      VARIABLE || IN = 39 Recruit's Pants VR = 
UNKNOWN      VARIABLE || IN = 40 Recruit's Boots VR = 
UNKNOWN      VARIABLE || IN = 43 Squire's Boots VR = 
UNKNOWN      VARIABLE || IN = 44 Squire's Pants VR = 
UNKNOWN      VARIABLE || IN = 45 Squire's Shirt VR = 
UNKNOWN      VARIABLE || IN = 47 Footpad's Shoes VR = 
UNKNOWN      VARIABLE || IN = 48 Footpad's Pants VR = 
UNKNOWN      VARIABLE || IN = 49 Footpad's Shirt VR = 
UNKNOWN      VARIABLE || IN = 51 Neophyte's Boots VR = 
UNKNOWN      VARIABLE || IN = 52 Neophyte's Pants VR = 
UNKNOWN      VARIABLE || IN = 53 Neophyte's Shirt VR = 
UNKNOWN      VARIABLE || IN = 55 Apprentice's Boots VR = 
UNKNOWN      VARIABLE || IN = 56 Apprentice's Robe VR = 
UNKNOWN      VARIABLE || IN = 57 Acolyte's Robe VR = 
UNKNOWN      VARIABLE || IN = 59 Acolyte's Shoes VR = 
UNKNOWN      VARIABLE || IN = 60 Layered Tunic VR = 
UNKNOWN      VARIABLE || IN = 61 Dwarven Leather Pants VR = 
UNKNOWN      VARIABLE || IN = 79 Dwarven Cloth Britches VR = 
UNKNOWN      VARIABLE || IN = 80 Soft Fur-lined Shoes VR = 
UNKNOWN      VARIABLE || IN = 85 Dirty Leather Vest VR = 
UNKNOWN      VARIABLE || IN = 117 Tough Jerky VR = 
UNKNOWN      VARIABLE || IN = 118 Minor Healing Potion VR = 
UNKNOWN      VARIABLE || IN = 120 Thug Pants VR = 
UNKNOWN      VARIABLE || IN = 121 Thug Boots VR = 
UNKNOWN      VARIABLE || IN = 127 Trapper's Shirt VR = 


этот кусок кода проверяет поля, если есть какие-то другие поля кроме этих, он должен записывать в лог другое (неправильное) поле...
раньше при fscanf(fp,"%s",&st) всё работало, с новой же конструкцией это не работает smile может всё-таки надо делать и fscanf? если нет подскажи как лучше...

Код

    if ((strncmp(buf,"bonding=",8)!=0)&&
        (strncmp(buf,"buyprice=",9)!=0)&&
        (strncmp(buf,"class=",6)!=0)&&
        (strncmp(buf,"classes=",8)!=0)&&
        (strncmp(buf,"description=",12)!=0)&&
        (strncmp(buf,"language=",9)!=0)&&
        (strncmp(buf,"level=",6)!=0)&&
        (strncmp(buf,"material=",9)!=0)&&
        (strncmp(buf,"maxcount=",9)!=0)&&
        (strncmp(buf,"model=",6)!=0)&&
        (strncmp(buf,"name=",5)!=0)&&
        (strncmp(buf,"pagetext=",9)!=0)&&
        (strncmp(buf,"quality=",8)!=0)&&
        (strncmp(buf,"races=",6)!=0)&&
        (strncmp(buf,"reqlevel=",9)!=0)&&
        (strncmp(buf,"sellprice=",10)!=0)&&
        (strncmp(buf,"//",2)!=0)&&
        (strncmp(buf,"#include",8)!=0)&&
        (strncmp(buf,"[item",5)!=0)&&
        (strncmp(buf,"damage=",7)!=0)&&
        (strncmp(buf,"delay=",6)!=0)&&
        (strncmp(buf,"durability=",11)!=0)&&
        (strncmp(buf,"inventorytype=",14)!=0)&&
        (strncmp(buf,"sheath=",7)!=0)&&
        (strncmp(buf,"resistance1=",12)!=0)&&
        (strncmp(buf,"resistance2=",12)!=0)&&
        (strncmp(buf,"resistance3=",12)!=0)&&
        (strncmp(buf,"resistance4=",12)!=0)&&
        (strncmp(buf,"resistance5=",12)!=0)&&
        (strncmp(buf,"resistance6=",12)!=0)&&
        (strncmp(buf,"resistance7=",12)!=0)&&
        (strncmp(buf,"resistances=",12)!=0)&&                    // ???
        (strncmp(buf,"bonus=",6)!=0)&&
        (strncmp(buf,"questid=",8)!=0)&&
        (strncmp(buf,"block=",6)!=0)&&
        (strncmp(buf,"part=",5)!=0)&&
        (strncmp(buf,"flags=",6)!=0)&&
        (strncmp(buf,"extra=",6)!=0)&&                           // ???
        (strncmp(buf,"variation=",10)!=0)&&
        (strncmp(buf,"containerslots=",15)!=0)&&
        (strncmp(buf,"subclass=",9)!=0)&&
        (strncmp(buf,"spell=",6)!=0)&&
        (strncmp(buf,"skill=",6)!=0)&&
        (strncmp(buf,"skillrank=",10)!=0)&&
        (strncmp(buf,"questscript=",12)!=0)&&
        (strncmp(buf,"starts_quests=",14)!=0)&&                  // 1 ?
        (strncmp(buf,"startquest=",11)!=0)&&                     // 1 ?
        (strncmp(buf,"ammotype=",9)!=0)&&                        // ???
        (strncmp(buf,"oldclass=",9)!=0)&&                        // ???
        (strncmp(buf,"pagematerial=",13)!=0)&&                   // ???
        (strncmp(buf,"loot=",5)!=0)&&
        (strncmp(buf,"lockid=",7)!=0)&&                          // ???
        (strncmp(buf,"finishes_quests=",16)!=0)&&
        (strncmp(buf,"set=",4)!=0)&&
        (strncmp(buf,"questid2=",9)!=0)&&                        // ???
        (strncmp(buf,"spellreq=",9)!=0)&&
        (strncmp(buf,"pvprankreq=",11)!=0)&&
        (strncmp(buf,"stackable=",10)!=0)) { lg = fopen("log.log","at");
                                             printf("UNKNOWN      VARIABLE! ADDED TO LOG!\n");
                                             fprintf(lg,"UNKNOWN      VARIABLE || ID = %d NM = %s VR = %s\n",vl0,nm,st);
                                             fclose(lg);
                                           };
 

Автор: ptr 11.7.2006, 15:44
Что-то мне с предыдущим файлом такого повторить не удалось.
Кстати st тебе не нужен. 

Автор: ReGeDiT 11.7.2006, 15:57
а что мне делать то? smile))))

было так, работало
Код

do {
    fscanf(fp,"%s",&st);
...
    if ((strncmp(st,"bonding=",8)!=0)&& // Работает 100%
        (strncmp(st,"buyprice=",9)!=0)&&
        (strncmp(st,"class=",6)!=0)&&
        (strncmp(st,"classes=",8)!=0)&&
        (strncmp(st,"description=",12)!=0)&&
        (strncmp(st,"language=",9)!=0)&&
        (strncmp(st,"level=",6)!=0)&&
        (strncmp(st,"material=",9)!=0)&&
        (strncmp(st,"maxcount=",9)!=0)&&
        (strncmp(st,"model=",6)!=0)&&
        (strncmp(st,"name=",5)!=0)&&
        (strncmp(st,"pagetext=",9)!=0)&&
        (strncmp(st,"quality=",8)!=0)&&
        (strncmp(st,"races=",6)!=0)&&
        (strncmp(st,"reqlevel=",9)!=0)&&
        (strncmp(st,"sellprice=",10)!=0)&&
        (strncmp(st,"//",2)!=0)&&
        (strncmp(st,"#include",8)!=0)&&
        (strncmp(st,"[item",5)!=0)&&
        (strncmp(st,"damage=",7)!=0)&&
        (strncmp(st,"delay=",6)!=0)&&
        (strncmp(st,"durability=",11)!=0)&&
        (strncmp(st,"inventorytype=",14)!=0)&&
        (strncmp(st,"sheath=",7)!=0)&&
        (strncmp(st,"resistance1=",12)!=0)&&
        (strncmp(st,"resistance2=",12)!=0)&&
        (strncmp(st,"resistance3=",12)!=0)&&
        (strncmp(st,"resistance4=",12)!=0)&&
        (strncmp(st,"resistance5=",12)!=0)&&
        (strncmp(st,"resistance6=",12)!=0)&&
        (strncmp(st,"resistance7=",12)!=0)&&
        (strncmp(st,"resistances=",12)!=0)&&                    // ???
        (strncmp(st,"bonus=",6)!=0)&&
        (strncmp(st,"questid=",8)!=0)&&
        (strncmp(st,"block=",6)!=0)&&
        (strncmp(st,"part=",5)!=0)&&
        (strncmp(st,"flags=",6)!=0)&&
        (strncmp(st,"extra=",6)!=0)&&                           // ???
        (strncmp(st,"variation=",10)!=0)&&
        (strncmp(st,"containerslots=",15)!=0)&&
        (strncmp(st,"subclass=",9)!=0)&&
        (strncmp(st,"spell=",6)!=0)&&
        (strncmp(st,"skill=",6)!=0)&&
        (strncmp(st,"skillrank=",10)!=0)&&
        (strncmp(st,"questscript=",12)!=0)&&
        (strncmp(st,"starts_quests=",14)!=0)&&                  // 1 ?
        (strncmp(st,"startquest=",11)!=0)&&                     // 1 ?
        (strncmp(st,"ammotype=",9)!=0)&&                        // ???
        (strncmp(st,"oldclass=",9)!=0)&&                        // ???
        (strncmp(st,"pagematerial=",13)!=0)&&                   // ???
        (strncmp(st,"loot=",5)!=0)&&
        (strncmp(st,"lockid=",7)!=0)&&                          // ???
        (strncmp(st,"finishes_quests=",16)!=0)&&
        (strncmp(st,"set=",4)!=0)&&
        (strncmp(st,"questid2=",9)!=0)&&                        // ???
        (strncmp(st,"spellreq=",9)!=0)&&
        (strncmp(st,"pvprankreq=",11)!=0)&&
        (strncmp(st,"stackable=",10)!=0)) { lg = fopen("log.log","at");
                        printf("UNKNOWN      VARIABLE! ADDED TO LOG!\n");
                        fprintf(lg,"IN = %d %s VR = %s\n",vl0,nm,st);
                            fclose(lg);
                          };
...


теперь так, и не работает
Код

do {
    buf = getline(fp);
...
if ((strncmp(buf,"bonding=",8)!=0)&&
        (strncmp(buf,"buyprice=",9)!=0)&&
        (strncmp(buf,"class=",6)!=0)&&
        (strncmp(buf,"classes=",8)!=0)&&
        (strncmp(buf,"description=",12)!=0)&&
        (strncmp(buf,"language=",9)!=0)&&
        (strncmp(buf,"level=",6)!=0)&&
        (strncmp(buf,"material=",9)!=0)&&
        (strncmp(buf,"maxcount=",9)!=0)&&
        (strncmp(buf,"model=",6)!=0)&&
        (strncmp(buf,"name=",5)!=0)&&
        (strncmp(buf,"pagetext=",9)!=0)&&
        (strncmp(buf,"quality=",8)!=0)&&
        (strncmp(buf,"races=",6)!=0)&&
        (strncmp(buf,"reqlevel=",9)!=0)&&
        (strncmp(buf,"sellprice=",10)!=0)&&
        (strncmp(buf,"//",2)!=0)&&
        (strncmp(buf,"#include",8)!=0)&&
        (strncmp(buf,"[item",5)!=0)&&
        (strncmp(buf,"damage=",7)!=0)&&
        (strncmp(buf,"delay=",6)!=0)&&
        (strncmp(buf,"durability=",11)!=0)&&
        (strncmp(buf,"inventorytype=",14)!=0)&&
        (strncmp(buf,"sheath=",7)!=0)&&
        (strncmp(buf,"resistance1=",12)!=0)&&
        (strncmp(buf,"resistance2=",12)!=0)&&
        (strncmp(buf,"resistance3=",12)!=0)&&
        (strncmp(buf,"resistance4=",12)!=0)&&
        (strncmp(buf,"resistance5=",12)!=0)&&
        (strncmp(buf,"resistance6=",12)!=0)&&
        (strncmp(buf,"resistance7=",12)!=0)&&
        (strncmp(buf,"resistances=",12)!=0)&&                    // ???
        (strncmp(buf,"bonus=",6)!=0)&&
        (strncmp(buf,"questid=",8)!=0)&&
        (strncmp(buf,"block=",6)!=0)&&
        (strncmp(buf,"part=",5)!=0)&&
        (strncmp(buf,"flags=",6)!=0)&&
        (strncmp(buf,"extra=",6)!=0)&&                           // ???
        (strncmp(buf,"variation=",10)!=0)&&
        (strncmp(buf,"containerslots=",15)!=0)&&
        (strncmp(buf,"subclass=",9)!=0)&&
        (strncmp(buf,"spell=",6)!=0)&&
        (strncmp(buf,"skill=",6)!=0)&&
        (strncmp(buf,"skillrank=",10)!=0)&&
        (strncmp(buf,"questscript=",12)!=0)&&
        (strncmp(buf,"starts_quests=",14)!=0)&&                  // 1 ?
        (strncmp(buf,"startquest=",11)!=0)&&                     // 1 ?
        (strncmp(buf,"ammotype=",9)!=0)&&                        // ???
        (strncmp(buf,"oldclass=",9)!=0)&&                        // ???
        (strncmp(buf,"pagematerial=",13)!=0)&&                   // ???
        (strncmp(buf,"loot=",5)!=0)&&
        (strncmp(buf,"lockid=",7)!=0)&&                          // ???
        (strncmp(buf,"finishes_quests=",16)!=0)&&
        (strncmp(buf,"set=",4)!=0)&&
        (strncmp(buf,"questid2=",9)!=0)&&                        // ???
        (strncmp(buf,"spellreq=",9)!=0)&&
        (strncmp(buf,"pvprankreq=",11)!=0)&&
        (strncmp(buf,"stackable=",10)!=0)) { lg = fopen("log.log","at");
                                             printf("UNKNOWN      VARIABLE! ADDED TO LOG!\n");
                                             fprintf(lg,"UNKNOWN      VARIABLE || [item %d] NM=[%s] VR=%s\n",vl0,nm,buf);
                                             fclose(lg);
                                           };
...



в чём ошибка? или проблема? smile 

Автор: bsa 11.7.2006, 17:50
Выведи на экран значение buf!!!
 

Автор: ptr 11.7.2006, 18:02
ReGeDiT, выложи всю программу и файл items.scp, а то у меня старая программа со старым файлом нормально работает.  

Автор: ReGeDiT 11.7.2006, 18:14
Код

/***************************
** Модуль проверки файлов **
***************************/

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

#define BUF_SIZE 256

char* getline(FILE* stream)
{
    int cur_size=0;
    char* buf=(char*)malloc(sizeof(char)*BUF_SIZE);
    if (NULL==buf) { fprintf(stderr,"Couldn't allocate memory!");
             return NULL;
           }
    while(fgets(&buf[cur_size],BUF_SIZE,stream))
      { if ('\n'==buf[strlen(buf)-1])
      {
       buf[strlen(buf)-1]='\0';
       return buf;
      }
    cur_size+=BUF_SIZE-1;
    buf=(char*)realloc(buf,cur_size+BUF_SIZE);
    if (NULL==buf)
      {
       fprintf(stderr,"Couldn't allocate memory!");
       return NULL;
      }
      }
    return buf;
}

/***************************************
** Проверка items.scp на правильность **
***************************************/

FILE *fp, *lg;
int vl0 = 0, vl1 = 0, vl2 = 0, dif = 0, nmb = 0, id = 0;
char nm[100];
char ck[100];
char *buf = NULL;

void main(void)
{
lg = fopen("log.log","wt");
fprintf(lg,"WoWCHK v0.3 Auto-Generated LOG-File\n\n[items.scp]\n\nNM : Item Name\nBP : Buy Price\nSP : Sell Price\nDF : Difference\nVR : Variable\n\n");
fclose(lg);
fp = fopen("items.scp","rt");
do {
    buf = getline(fp);
    if (strncmp(buf,"[item",5)==0) { sscanf(buf,"[item %d]",&vl0); };
    printf("[item %d]\n",vl0);
    if (strncmp(buf,"name=",5)==0) { strncpy(nm,strstr(buf,"=")+1,99); };
    printf("name=%s]\n",nm);
    if (strncmp(buf,"buyprice=",9)==0)   {  // тут всё работает 100%
    vl1 = atoi(strstr(buf,"=")+1);          // тут всё работает 100%
    printf("buyprice=%d\n",vl1);        }; // тут всё работает 100%
    if (strncmp(buf,"sellprice=",10)==0) { // Работает 100%
    vl2 = atoi(strstr(buf,"=")+1);
    printf("sellprice=%d\n",vl2);
    dif = vl2-vl1;
    if ((vl1==vl2)&&(vl1!=1)&&(vl2!=1)) { printf("SELLPRICE == BUYPRICE! ADDED TO LOG!\n");
                                          lg = fopen("log.log","at");
                                          fprintf(lg,"SELLPRICE == BUYPRICE || [item %d] NM=[%s] BP=%d SP=%d DF=%d\n",vl0,nm,vl1,vl2,dif);
                                          fclose(lg);
                                        };
    if (vl2>vl1) { printf("SELLPRICE >> BUYPRICE! ADDED TO LOG!\n");
                   lg = fopen("log.log","at");
                   fprintf(lg,"SELLPRICE >> BUYPRICE || [item %d] NM=[%s] BP=%d SP=%d DF=%d\n",vl0,nm,vl1,vl2,dif);
                   fclose(lg);
                 };
                                };
/*    if ((strncmp(buf,"bonding=",8)!=0)&&
        (strncmp(buf,"buyprice=",9)!=0)&&
        (strncmp(buf,"class=",6)!=0)&&
        (strncmp(buf,"classes=",8)!=0)&&
        (strncmp(buf,"description=",12)!=0)&&
        (strncmp(buf,"language=",9)!=0)&&
        (strncmp(buf,"level=",6)!=0)&&
        (strncmp(buf,"material=",9)!=0)&&
        (strncmp(buf,"maxcount=",9)!=0)&&
        (strncmp(buf,"model=",6)!=0)&&
        (strncmp(buf,"name=",5)!=0)&&
        (strncmp(buf,"pagetext=",9)!=0)&&
        (strncmp(buf,"quality=",8)!=0)&&
        (strncmp(buf,"races=",6)!=0)&&
        (strncmp(buf,"reqlevel=",9)!=0)&&
        (strncmp(buf,"sellprice=",10)!=0)&&
        (strncmp(buf,"//",2)!=0)&&
        (strncmp(buf,"#include",8)!=0)&&
        (strncmp(buf,"[item",5)!=0)&&
        (strncmp(buf,"damage=",7)!=0)&&
        (strncmp(buf,"delay=",6)!=0)&&
        (strncmp(buf,"durability=",11)!=0)&&
        (strncmp(buf,"inventorytype=",14)!=0)&&
        (strncmp(buf,"sheath=",7)!=0)&&
        (strncmp(buf,"resistance1=",12)!=0)&&
        (strncmp(buf,"resistance2=",12)!=0)&&
        (strncmp(buf,"resistance3=",12)!=0)&&
        (strncmp(buf,"resistance4=",12)!=0)&&
        (strncmp(buf,"resistance5=",12)!=0)&&
        (strncmp(buf,"resistance6=",12)!=0)&&
        (strncmp(buf,"resistance7=",12)!=0)&&
        (strncmp(buf,"resistances=",12)!=0)&&                    // ???
        (strncmp(buf,"bonus=",6)!=0)&&
        (strncmp(buf,"questid=",8)!=0)&&
        (strncmp(buf,"block=",6)!=0)&&
        (strncmp(buf,"part=",5)!=0)&&
        (strncmp(buf,"flags=",6)!=0)&&
        (strncmp(buf,"extra=",6)!=0)&&                           // ???
        (strncmp(buf,"variation=",10)!=0)&&
        (strncmp(buf,"containerslots=",15)!=0)&&
        (strncmp(buf,"subclass=",9)!=0)&&
        (strncmp(buf,"spell=",6)!=0)&&
        (strncmp(buf,"skill=",6)!=0)&&
        (strncmp(buf,"skillrank=",10)!=0)&&
        (strncmp(buf,"questscript=",12)!=0)&&
        (strncmp(buf,"starts_quests=",14)!=0)&&                  // 1 ?
        (strncmp(buf,"startquest=",11)!=0)&&                     // 1 ?
        (strncmp(buf,"ammotype=",9)!=0)&&                        // ???
        (strncmp(buf,"oldclass=",9)!=0)&&                        // ???
        (strncmp(buf,"pagematerial=",13)!=0)&&                   // ???
        (strncmp(buf,"loot=",5)!=0)&&
        (strncmp(buf,"lockid=",7)!=0)&&                          // ???
        (strncmp(buf,"finishes_quests=",16)!=0)&&
        (strncmp(buf,"set=",4)!=0)&&
        (strncmp(buf,"questid2=",9)!=0)&&                        // ???
        (strncmp(buf,"spellreq=",9)!=0)&&
        (strncmp(buf,"pvprankreq=",11)!=0)&&
        (strncmp(buf,"stackable=",10)!=0)) { lg = fopen("log.log","at");
                                             printf("UNKNOWN      VARIABLE! ADDED TO LOG!\n");
                                             fprintf(lg,"UNKNOWN      VARIABLE || [item %d] NM=[%s] VR=%s\n",vl0,nm,buf);
                                             fclose(lg);
                                           };
*/    free(buf);
    if (feof(fp)) { printf("All File Was Scanned [EOF]...\n");
                    lg = fopen("log.log","at");
                    fprintf(lg,"\nAll File Was Scanned [EOF]...");
                    fclose(lg);
                  };
   }
while (!feof(fp));
fclose(fp);
}

/*********************************************************************
** ThX to ptr, Rockie, Олег4, Fedor, Fazil6 and all who i forgot ^^ **
** Especially thx to ptr, for his help                              **
*********************************************************************/


items.scp (очень большой, в оригинале 4.5 мегабайта)
Код

[item 1]
bonding=4
buyprice=300
class=12
classes=07FF
description=Welcome to World of Darkness.
language=1
level=1
material=-1
maxcount=1
model=5567
name=Welcome Note
pagetext=1
quality=1
races=0FF
reqlevel=1
sellprice=100
stackable=1

[item 2]
quality=0
bonding=4
buyprice=300
class=12
classes=07FF
description=If you sell this item, you get 1 Silver for it!
level=1
material=0
model=29842
name=1 Silver!
races=0FF
reqlevel=1
sellprice=100

[item 3]
quality=0
bonding=4
buyprice=3000
class=12
classes=07FF
description=If you sell this item, you get 10 Silver for it!
level=1
material=0
model=29842
name=10 Silver!
races=0FF
reqlevel=1
sellprice=1000

[item 4]
quality=0
bonding=4
buyprice=30000
class=12
classes=07FF
description=If you sell this item, you get 1 Gold for it!
level=1
material=0
model=11766
name=1 Gold!
races=0FF
reqlevel=1
sellprice=10000

[item 5]
quality=0
bonding=4
buyprice=300000
class=12
classes=07FF
description=If you sell this item, you get 10 Gold for it!
level=1
material=0
model=11766
name=10 Gold!
races=0FF
reqlevel=1
sellprice=100000

[item 6]
quality=0
bonding=4
buyprice=3000000
class=12
classes=07FF
description=If you sell this item, you get 100 Gold for it!
level=1
material=0
model=11766
name=100 Gold!
races=0FF
reqlevel=1
sellprice=1000000

[item 7]
quality=0
bonding=4
buyprice=30000000
class=12
classes=07FF
description=If you sell this item, you get 1000 Gold for it!
level=1
material=0
model=11766
name=1000 Gold!
races=0FF
reqlevel=1
sellprice=10000000

[item 21]
bonding=4
buyprice=300
class=12
classes=07FF
description=Collect 250 purple tokens for the exchange.
level=1
material=-1
maxcount=1
model=5917
name=Purple Token
quality=1
races=0FF
reqlevel=1
sellprice=100
stackable=250

[item 22]
bonding=4
buyprice=1500
class=12
classes=07FF
description=Collect 100 green tokens for the exchange.
level=1
material=-1
maxcount=1
model=27801
name=Green Token
quality=1
races=0FF
reqlevel=1
sellprice=500
stackable=100

[item 23]
bonding=4
buyprice=15000
class=12
classes=07FF
description=Collect 50 yellow tokens for the exchange.
level=1
material=-1
maxcount=1
model=27556
name=Yellow Token
quality=1
races=0FF
reqlevel=1
sellprice=5000
stackable=50

[item 24]
bonding=4
buyprice=90000
class=12
classes=07FF
description=Collect 10 white tokens for the exchange.
level=1
material=-1
maxcount=1
model=23293
name=White Token
quality=1
races=0FF
reqlevel=1
sellprice=30000
stackable=10

[item 25]
buyprice=35
class=2
classes=07FF
damage=1 3 0
delay=1900
durability=20
inventorytype=21
language=1
level=2
material=1
model=1542
name=Worn Shortsword
quality=1
races=0FF
reqlevel=1
sellprice=7
sheath=3
stackable=1
subclass=7

[item 35]
buyprice=47
class=2
classes=07FF
damage=3 5 0
delay=2900
durability=25
inventorytype=17
level=2
material=2
model=472
name=Bent Staff
quality=1
races=0FF
reqlevel=1
sellprice=9
sheath=2
stackable=1
subclass=10

[item 36]
buyprice=38
class=2
classes=07FF
damage=1 3 0
delay=1900
durability=20
inventorytype=21
level=2
material=2
model=5194
name=Worn Mace
quality=1
races=0FF
reqlevel=1
sellprice=7
sheath=3
stackable=1
subclass=4

[item 37]
subclass=0
buyprice=38
class=2
classes=07FF
damage=1 3 0
delay=2000
durability=20
inventorytype=21
level=2
material=1
model=14029
name=Worn Axe
quality=1
races=0FF
reqlevel=1
sellprice=7
sheath=3
stackable=1

[item 38]
subclass=0
buyprice=1
class=4
classes=07FF
inventorytype=4
level=1
material=7
model=9891
name=Recruit's Shirt
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 39]
quality=0
buyprice=5
class=4
classes=07FF
durability=25
inventorytype=7
level=1
material=7
model=9892
name=Recruit's Pants
races=0FF
reqlevel=1
resistance1=2
sellprice=1
stackable=1
subclass=1

[item 40]
subclass=0
buyprice=4
class=4
classes=07FF
inventorytype=8
level=1
material=7
model=10141
name=Recruit's Boots
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 43]
subclass=0
buyprice=4
class=4
classes=07FF
inventorytype=8
level=1
material=7
model=10272
name=Squire's Boots
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 44]
quality=0
buyprice=4
class=4
classes=07FF
durability=25
inventorytype=7
level=1
material=7
model=9937
name=Squire's Pants
races=0FF
reqlevel=1
resistance1=2
sellprice=1
stackable=1
subclass=1

[item 45]
subclass=0
buyprice=1
class=4
classes=07FF
inventorytype=4
level=1
material=7
model=3265
name=Squire's Shirt
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 47]
subclass=0
buyprice=4
class=4
classes=07FF
inventorytype=8
level=1
material=7
model=9915
name=Footpad's Shoes
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 48]
quality=0
buyprice=4
class=4
classes=07FF
durability=25
inventorytype=7
level=1
material=7
model=9913
name=Footpad's Pants
races=0FF
reqlevel=1
resistance1=2
sellprice=1
stackable=1
subclass=1

[item 49]
subclass=0
buyprice=1
class=4
classes=07FF
inventorytype=4
level=1
material=7
model=9906
name=Footpad's Shirt
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 51]
subclass=0
buyprice=5
class=4
classes=07FF
inventorytype=8
level=1
material=7
model=9946
name=Neophyte's Boots
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 52]
quality=0
buyprice=5
class=4
classes=07FF
durability=25
inventorytype=7
level=1
material=7
model=9945
name=Neophyte's Pants
races=0FF
reqlevel=1
resistance1=2
sellprice=1
stackable=1
subclass=1

[item 53]
subclass=0
buyprice=1
class=4
classes=07FF
inventorytype=4
level=1
material=7
model=9944
name=Neophyte's Shirt
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 55]
subclass=0
buyprice=5
class=4
classes=07FF
inventorytype=8
level=1
material=7
model=9929
name=Apprentice's Boots
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 56]
quality=0
buyprice=5
class=4
classes=07FF
durability=35
inventorytype=20
level=1
material=7
model=12647
name=Apprentice's Robe
races=0FF
reqlevel=1
resistance1=3
sellprice=1
stackable=1
subclass=1

[item 57]
quality=0
buyprice=5
class=4
classes=07FF
durability=35
inventorytype=20
level=1
material=7
model=12645
name=Acolyte's Robe
races=0FF
reqlevel=1
resistance1=3
sellprice=1
stackable=1
subclass=1

[item 59]
subclass=0
buyprice=5
class=4
classes=07FF
inventorytype=8
level=1
material=7
model=3261
name=Acolyte's Shoes
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 60]
bonding=1
buyprice=60
class=4
classes=07FF
durability=45
inventorytype=5
level=5
material=8
model=16891
name=Layered Tunic
quality=1
questid=6
races=0FF
reqlevel=1
resistance1=33
sellprice=12
stackable=1
subclass=2

[item 61]
bonding=1
buyprice=60
class=4
classes=07FF
durability=35
inventorytype=7
level=5
material=8
model=16953
name=Dwarven Leather Pants
quality=1
questid=183
races=0FF
reqlevel=1
resistance1=29
sellprice=12
stackable=1
subclass=2

[item 79]
bonding=1
buyprice=52
class=4
classes=07FF
durability=30
inventorytype=7
level=5
material=7
model=16847
name=Dwarven Cloth Britches
quality=1
questid=183
races=0FF
reqlevel=1
resistance1=9
sellprice=10
stackable=1
subclass=1

[item 80]
bonding=1
buyprice=35
class=4
classes=07FF
durability=20
inventorytype=8
level=5
material=7
model=16854
name=Soft Fur-lined Shoes
quality=1
questid=33
races=0FF
reqlevel=1
resistance1=7
sellprice=7
stackable=1
subclass=1

[item 85]
buyprice=62
class=4
classes=07FF
durability=45
inventorytype=5
level=5
material=8
model=16883
name=Dirty Leather Vest
quality=1
races=0FF
reqlevel=1
resistance1=33
sellprice=12
stackable=1
subclass=2

[item 117]
buyprice=25
class=0
classes=07FF
level=5
material=-1
model=2473
name=Tough Jerky
quality=1
questid=815, questid2=2160
races=0FF
reqlevel=1
sellprice=1
spell=433 0 -1 0 1000
stackable=20

[item 118]
buyprice=20
class=0
classes=07FF
level=5
material=3
model=15710
name=Minor Healing Potion
quality=1
questid=794, questid2=103
races=0FF
reqlevel=1
sellprice=5
spell=439 0 -1 0 120000
stackable=5

[item 120]
quality=0
buyprice=4
class=4
classes=07FF
durability=25
inventorytype=7
level=1
material=7
model=10006
name=Thug Pants
races=0FF
reqlevel=1
resistance1=2
sellprice=1
stackable=1
subclass=1

[item 121]
subclass=0
buyprice=4
class=4
classes=07FF
inventorytype=8
level=1
material=7
model=10008
name=Thug Boots
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 127]
subclass=0
buyprice=1
class=4
classes=07FF
inventorytype=4
level=1
material=7
model=9996
name=Trapper's Shirt
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 128]
quality=0
buyprice=5
class=4
classes=07FF
durability=25
flags=16
inventorytype=7
level=1
material=7
model=396
name=Deprecated Tauren Trapper's Pants
races=0FF
reqlevel=1
resistance1=2
sellprice=1
stackable=1
subclass=1

[item 129]
subclass=0
buyprice=5
class=4
classes=07FF
inventorytype=8
level=1
material=7
model=9977
name=Rugged Trapper's Boots
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 139]
quality=0
buyprice=4
class=4
classes=07FF
durability=25
inventorytype=7
level=1
material=7
model=9988
name=Brawler's Pants
races=0FF
reqlevel=1
resistance1=2
sellprice=1
stackable=1
subclass=1

[item 140]
subclass=0
buyprice=4
class=4
classes=07FF
inventorytype=8
level=1
material=7
model=9992
name=Brawler's Boots
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 147]
quality=0
buyprice=5
class=4
classes=07FF
durability=25
inventorytype=7
level=1
material=7
model=9975
name=Rugged Trapper's Pants
races=0FF
reqlevel=1
resistance1=2
sellprice=1
stackable=1
subclass=1

[item 148]
subclass=0
buyprice=1
class=4
classes=07FF
inventorytype=4
level=1
material=7
model=9976
name=Rugged Trapper's Shirt
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 153]
quality=0
buyprice=5
class=4
classes=07FF
durability=30
inventorytype=7
level=1
material=8
model=10050
name=Primitive Kilt
races=0FF
reqlevel=1
resistance1=14
sellprice=1
stackable=1
subclass=2

[item 154]
subclass=0
buyprice=1
class=4
classes=07FF
inventorytype=4
level=1
material=7
model=10058
name=Primitive Mantle
quality=1
races=0FF
reqlevel=1
sellprice=1
stackable=1

[item 159]
buyprice=25
class=0
classes=07FF
level=5
material=-1
model=18084
name=Refreshing Spring Water
quality=1
questid=381, questid2=2160
races=0FF
reqlevel=1
sellprice=1
spell=430 0 -1 0 59 1000
stackable=20

[item 182]
bonding=4
class=12
classes=07FF
flags=2048
level=1
material=-1
maxcount=1
model=7038
name=Garrick's Head
quality=1
races=0FF
reqlevel=1
stackable=1

[item 192]
description=THIS IS A GM ITEM
resistance2=110
buyprice=271373
class=2
classes=07FF
damage=5 10 2
damage=51 63 0
damage=6 60 4
delay=500
inventorytype=21
level=75
material=6
model=5279
name=Martin Thunder
quality=1
races=0FF
reqlevel=60
resistance1=100
resistance3=110
resistance4=100
resistance5=100
resistance6=100
sellprice=54274
sheath=3
spell=265 0 0 -1 0 -1
stackable=1
subclass=14

[item 193]
buyprice=48
class=4
classes=07FF
durability=40
inventorytype=5
level=5
material=7
model=16579
name=Tattered Cloth Vest
quality=1
races=0FF
reqlevel=1
resistance1=10
sellprice=9
stackable=1
subclass=1

[item 194]
buyprice=49
class=4
classes=07FF
durability=30
inventorytype=7
level=5
material=7
model=16580
name=Tattered Cloth Pants
quality=1
races=0FF
reqlevel=1
resistance1=9
sellprice=9
stackable=1
subclass=1

[item 195]
buyprice=36
class=4
classes=07FF
durability=20
inventorytype=8
level=5
material=7
model=16582
name=Tattered Cloth Boots
quality=1
races=0FF
reqlevel=1
resistance1=7
sellprice=7
stackable=1
subclass=1

[item 200]
buyprice=2270
class=4
classes=07FF
durability=60
inventorytype=5
level=22
material=7
model=16777
name=Thick Cloth Vest
quality=1
races=0FF
reqlevel=17
resistance1=34
sellprice=454
stackable=1
subclass=1

[item 201]
buyprice=2278
class=4
classes=07FF
durability=45
inventorytype=7
level=22
material=7
model=16778
name=Thick Cloth Pants
quality=1
races=0FF
reqlevel=17
resistance1=30
sellprice=455
stackable=1
subclass=1

[item 202]
buyprice=1714
class=4
classes=07FF
durability=30
inventorytype=8
level=22
material=7
model=16780
name=Thick Cloth Shoes
quality=1
races=0FF
reqlevel=17
resistance1=24
sellprice=342
stackable=1
subclass=1

[item 203]
buyprice=1147
class=4
classes=07FF
durability=20
inventorytype=10
level=22
material=7
model=16779
name=Thick Cloth Gloves
quality=1
races=0FF
reqlevel=17
resistance1=21
sellprice=229
stackable=1
subclass=1

[item 209]
buyprice=60
class=4
classes=07FF
durability=35
inventorytype=7
level=5
material=8
model=17140
name=Dirty Leather Pants
quality=1
races=0FF
reqlevel=1
resistance1=29
sellprice=12
stackable=1
subclass=2

[item 210]
buyprice=45
class=4
classes=07FF
durability=20
inventorytype=8
level=5
material=8
model=14444
name=Dirty Leather Boots
quality=1
races=0FF
reqlevel=1
resistance1=23
sellprice=9
stackable=1
subclass=2

[item 236]
buyprice=2795
class=4
classes=07FF
durability=75
inventorytype=5
level=22
material=8
model=14278
name=Cured Leather Armor
quality=1
races=0FF
reqlevel=17
resistance1=77
sellprice=559
stackable=1
subclass=2

[item 237]
buyprice=2805
class=4
classes=07FF
durability=55
inventorytype=7
level=22
material=8
model=14476
name=Cured Leather Pants
quality=1
races=0FF
reqlevel=17
resistance1=67
sellprice=561
stackable=1
subclass=2

[item 238]
buyprice=2112
class=4
classes=07FF
durability=35
inventorytype=8
level=22
material=8
model=14474
name=Cured Leather Boots
quality=1
races=0FF
reqlevel=17
resistance1=53
sellprice=422
stackable=1
subclass=2

[item 239]
buyprice=1413
class=4
classes=07FF
durability=25
inventorytype=10
level=22
material=8
model=14475
name=Cured Leather Gloves
quality=1
races=0FF
reqlevel=17
resistance1=48
sellprice=282
stackable=1
subclass=2

[item 285]
buyprice=3555
class=4
classes=07FF
durability=85
inventorytype=5
level=22
material=5
model=16101
name=Scalemail Vest
quality=1
races=0FF
reqlevel=17
resistance1=165
sellprice=711
stackable=1
subclass=3
 

Автор: ReGeDiT 11.7.2006, 19:32
проблема решилась

Код

        (strncmp(buf,"",1)!=0)&&                                // Empty Line :)
        (strncmp(buf," ",1)!=0)&&                               // Space
        (strncmp(buf,"ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННээээЭЭЭЭ",200)!=0)&&
 

Автор: bsa 11.7.2006, 19:35
Может лучше делать не от обратного? А то какие-то глупости получаются, если честно. 

Автор: ReGeDiT 11.7.2006, 19:50
всё уже smile))) всем спасибо, особенно ptr 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)