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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
karaulov
0 / 0 / 0
Регистрация: 31.10.2011
Сообщений: 15
#1

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

11.02.2012, 22:18. Просмотров 754. Ответов 14
Метки нет (Все метки)

Допустим есть файл 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++
Пользователь вводит имя файла, программа выводит содержимое файла с указанием номеров строк. Если пользователь вводит не существующий...

Перечисление в BC++ - C++
В русском языке как, правило после букв Ж, Ч, Ш, Щ, пишется И, А, У, а не Ы, Я, Ю, (за исключением слов ЖЮРИ, БРОШЮРА, ПАРАШЮТ). Проверить...

Перечисление чисел - C++
Здравствуйте! Я не являюсь программистом, но в моём деле мне необходима помощь компьютера. И ради этого я начал изучать программирование. Я...

Перечисление Com портов - C++
В общем есть такая задачка, есть девайс, который передают данные по блютузу....в комп через USB воткнут приемник, который работает с компом...

Перечисление в структуре - C++
Здравствуйте! Я создала перечисление в структуре struct DCBSettings { enum ...

Не работает перечисление - C++
Сам код: #include <iostream> #include <string> using namespace std; #include <windows.h> #include <process.h> enum typ...

Перечисление enum - C++
Здравствуйте. Хотелось бы узнать, возможно ли "пройтись" по всем значениям перечисления, увеличивая переменную этого перечисления? Вот...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
11.02.2012, 22:41     Перечисление строк из файла #2
оба файла текстовые?
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
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
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.02.2012, 02:56     Перечисление строк из файла #4
retmas, gets не читает \n
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
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
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
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
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.02.2012, 14:33     Перечисление строк из файла #11
retmas, где вы увидели разницу между gets и fgets ?
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
12.02.2012, 14:47     Перечисление строк из файла #12
OstapBender, не знаете разницу - читайте маны, или что вы там предпочитаете читать в этом случае
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.02.2012, 14:59     Перечисление строк из файла #13
ок, перефразирую вопрос: "в чём вы видите принципиальную разницу?"
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
12.02.2012, 15:37     Перечисление строк из файла #14
в том, что gets, в отличие от fgets, не записывает '\n' в строку-параметр (не говоря о прочем)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2012, 17:05     Перечисление строк из файла
Еще ссылки по теме:

перечисление месяцев - C++
написать консольную программу на С++, которая использует перечисление для идентификации месяцев года значениями номеров месяца от 1 до 12....

Enum Перечисление - C++
Есть номиналы монет, которые занесены в 2 перечисления (enum): рубли и монеты. Набрать определенную сумму минимальным количеством монет. ...

Перечисление переменных - C++
int startPos = 0, endPos; Вот так записать можно? У меня вроде работает, а если с точки зрения классического "правописания"?

Перечисление для дурака - C++
Здравствуйте. Начал писать карточную игру в дурака, возник вопрос (ну или проблема, как угодно). Пишу я, допустим класс карты: ...

Задачка на Класы и перечисление - C++
Условие выполнения : в картинке enum Prof { sekretar , laborant , meneger , barmen , povar , oxoronec }; class peoplDate...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru