Форум программистов, компьютерный форум CyberForum.ru

Перечисление строк из файла - C++

Восстановить пароль Регистрация
 
karaulov
0 / 0 / 0
Регистрация: 31.10.2011
Сообщений: 15
11.02.2012, 22:18     Перечисление строк из файла #1
Допустим есть файл usernames.dat (который есть), в нём хранятся ники игроков в разном регистре.


нужно сравнить каждую строку из файла usernames.dat с той что лежит в переменной const char * nickname.


если найдено то прибавить к переменной "unsigned long k;" еденицу





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


Не по теме:

Ни чего лишнего не добавляйте

Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2012, 22:18     Перечисление строк из файла
Посмотрите здесь:

C++ Перечисление переменных
перечисление месяцев C++
Перечисление в BC++ C++
Не работает перечисление C++
Перечисление Com портов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
11.02.2012, 22:41     Перечисление строк из файла #2
оба файла текстовые?
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
11.02.2012, 22:48     Перечисление строк из файла #3
C
1
2
3
4
5
6
7
8
9
10
11
12
    FILE* f = fopen("usernames.dat", "r");
    while(!feof(f))
    {
        char buf[MAXLEN];
        int len = 0;
        fgets(buf, MAXLEN, f);
        len = strlen(buf);
        if(buf[len-1] == '\n')
            buf[len-1] = '\0';
        if(strcmp(buf, nickname) == 0)
            ++k;
    }
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.02.2012, 02:56     Перечисление строк из файла #4
retmas, gets не читает \n
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
12.02.2012, 08:31     Перечисление строк из файла #5
OstapBender, где вы gets увидели?
karaulov
0 / 0 / 0
Регистрация: 31.10.2011
Сообщений: 15
12.02.2012, 10:43  [ТС]     Перечисление строк из файла #6
Цитата Сообщение от retmas Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
    FILE* f = fopen("usernames.dat", "r");
    while(!feof(f))
    {
        char buf[MAXLEN];
        int len = 0;
        fgets(buf, MAXLEN, f);
        len = strlen(buf);
        if(buf[len-1] == '\n')
            buf[len-1] = '\0';
        if(strcmp(buf, nickname) == 0)
            ++k;
    }
только один вопрос, где тут сравнение nickname и каждой строки из файла, или хотя бы где хранятся строки из файла ?) Прошу, хоть немного прокомментируйте код.



Или тут уже все готово? (всмысле если строка найдена к k прибавляется 1 ?)


А выход из цикла будет, если строка = nickname (у меня в среднем 800 строк с никами в файле, если 1000 ников будет проверяется по 800 строк, это ведь много? а так на середине проверки выйдет из цикла и снова будет проверять, или разницы нет??) ? можно ли для этого использовать goto?


ну в общем спасибо, пойду проверять.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
12.02.2012, 11:00     Перечисление строк из файла #7
goto вообще не рекомендуется использовать, выход из цикла будет, когда будет конец файла
karaulov
0 / 0 / 0
Регистрация: 31.10.2011
Сообщений: 15
12.02.2012, 11:07  [ТС]     Перечисление строк из файла #8
//

всё отлично работает, но есть небольшая проблемка, я в первом сообщении писал "в нём хранятся ники игроков в разном регистре."... Есть ли замена strcmp, которая бы сравнивала в независимости от регистра??

Добавлено через 48 секунд
Цитата Сообщение от panicwassano Посмотреть сообщение
goto вообще не рекомендуется использовать, выход из цикла будет, когда будет конец файла
ну для чего то ведь есть goto если файл будет проверятся весь, ведь код будет выполнятся дольше?? или это не важно?

Добавлено через 4 минуты
файл с 800 строками, нужно будет проверить около 1000 раз сразу.

проц будет сильно грузить?
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
12.02.2012, 13:42     Перечисление строк из файла #9
если нужен выход из цикла при найденной строке пишите
C
1
2
3
4
5
        if(strcmp(buf, nickname) == 0)
        {
            ++k;
            break;
        }
в моем посте выше строка читается ф-ей fgets в buf, сравнивается buf с nickname с помощью strcmp.
MAXLEN определите сами

Добавлено через 4 минуты
если нужно сравнивать без учета регистра, можно воспользоваться нестандартными ф-ями сравнения. например часто в библиотеках присутствуют ф-ии наподобие stricmp. можно написать свою ф-ю сравнения
karaulov
0 / 0 / 0
Регистрация: 31.10.2011
Сообщений: 15
12.02.2012, 13:50  [ТС]     Перечисление строк из файла #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
static int _handle_amhcheck_command(t_connection * c, char const *text)
{
  t_elem const * curr;
  t_connection * conn;
  char const * nickname;
  unsigned int   i;
  unsigned int o,l=0;
  FILE* f = fopen("usernames.dat", "r");
  
  for (i=0; text[i]!=' ' && text[i]!='\0'; i++); /* skip command */
  for (; text[i]==' '; i++);
  
  if (text[i]=='\0')
    {
        LIST_TRAVERSE_CONST(connlist(),curr)
        {
        conn = (t_connection*)elem_get_data(curr);
        if (conn_get_account(conn))
        {
 
        char current_str[2000];
        unsigned long n,z=0;
        unsigned long k=0;
 
        nickname=conn_get_username(conn); 
         
        while(!feof(f))
        {
        char buf[MAX_USERNAME_LEN+MAX_REALMNAME_LEN];
                      int len = 0;
        int MAXLEN = MAX_USERNAME_LEN+MAX_REALMNAME_LEN;
        fgets(buf, MAXLEN, f);
        len = strlen(buf);
        if(buf[len-1] == '\n')
            buf[len-1] = '\0';
        if(strcmp(buf, nickname) == 0)
    {
            ++k;
    break;
    }
         }
        
        if ((nickname=="OpenDiv") || ((nickname=="OpenDiv1") || (nickname=="OpenDiv2") || (nickname=="OpenDiv3") || (nickname=="OpenDiv4") || (nickname=="OpenDiv5") || (nickname=="OpenDiv6") || (nickname=="OpenDiv7") || (nickname=="OpenDiv8") || (nickname=="OpenDiv9") || (nickname=="OpenDiv10") || (nickname=="OpenDiv11") || (nickname=="OpenDiv12") || (nickname=="OpenDiv13") || (nickname=="OpenDiv14") || (nickname=="OpenDiv15") || (nickname=="OpenDiv16") || (nickname=="AMX") || (nickname=="CloseDiv") || (nickname=="ImbaDiv") || (nickname=="XXX") || (nickname=="AOP") || (nickname=="TR") || (nickname=="Buni") || (nickname=="Rita") || (nickname=="Omi") || (nickname=="Mark") || (nickname=="Mila") || (nickname=="Lara") || (nickname=="Void") )
        {
        k=0;
         break;
        }
        else if (k==0)
        {
        conn_set_state(conn,conn_state_destroy);
        k=0;
        o++;
        }
        else    
        {
        k=0;
        l++;
        }
        }
        }
      
    return 0;
    }
    
    
   fclose(f);
 
  return 0;
}
ну вот что получилось. На неизвестные переменные не обращайте внимание.

Как думаете, так пойдёт? (в смысле я ничего не намутил лишнего в коде?)

Добавлено через 7 минут
хотя есть некоторые переменные левые, щас поудаляю
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.02.2012, 14:33     Перечисление строк из файла #11
retmas, где вы увидели разницу между gets и fgets ?
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
12.02.2012, 14:47     Перечисление строк из файла #12
OstapBender, не знаете разницу - читайте маны, или что вы там предпочитаете читать в этом случае
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.02.2012, 14:59     Перечисление строк из файла #13
ок, перефразирую вопрос: "в чём вы видите принципиальную разницу?"
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
12.02.2012, 15:37     Перечисление строк из файла #14
в том, что gets, в отличие от fgets, не записывает '\n' в строку-параметр (не говоря о прочем)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2012, 17:05     Перечисление строк из файла
Еще ссылки по теме:

C++ Пользователь вводит имя файла, программа выводит содержимое файла с указанием номеров строк.
C++ Перечисление чисел
Перечисление в структуре C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.02.2012, 17:05     Перечисление строк из файла #15
признаю поражение, не знал этого.
Yandex
Объявления
12.02.2012, 17:05     Перечисление строк из файла
Ответ Создать тему
Опции темы

Текущее время: 21:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru