Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Ruslik_A
1 / 1 / 1
Регистрация: 14.12.2012
Сообщений: 41
#1

Создать словарь слов встречающихся в текстовом файле - C#

19.05.2015, 11:09. Просмотров 1068. Ответов 2
Метки нет (Все метки)

Очень нужно. Получил задание - осуществить обработку текстового файла, содержащего некоторый многостраничный текст. Результат обработки – текстовый файл, содержащий предметный указатель встречающихся в тексте слов. Вот нашел в старых своих работах что-то подобное, но на С++. Пока сложно с файлами и строками на С#, может кто поможет перевести имеющийся код на С#?
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
    
#define SEPLINE "----------------------------------------\n"
    
typedef struct {
    char *wrd;
    size_t cnt;
} Wrd_t;
 
int wrdcmp(const void *a, const void *b){
    return strcmp((*(Wrd_t*)a).wrd, (*(Wrd_t*)b).wrd);
}
 
int cntcmp(const void *a, const void *b){
    return (*(Wrd_t*)b).cnt - (*(Wrd_t*)a).cnt;
}
 
int main(void){
    char buf[BUFSIZ], *p;
    Wrd_t *words;
    size_t count, i;
    FILE *f;
    int action;
    
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    printf("Имя файла: ");
    if ( !fgets(buf, sizeof(buf), stdin) )
        exit(1);
    if ( p = strrchr(buf, '\n') )
        *p = '\0';
    if ( !*buf )
        exit(1);
    if ( ( f = fopen(buf, "r") ) == NULL ){
        perror("Не могу открыть файл!\n");
        exit(1);
    }
    words = NULL;
    count = 0;
    while ( fscanf(f, "%s", buf) == 1 ){
        for ( i = 0; i < count; ++i ){
            if ( !strcmp(words[i].wrd, buf) ){
                ++(words[i].cnt);
                break;
            }
        }
        if ( i == count ){
            if ( ( words = (Wrd_t*)realloc(words, sizeof(Wrd_t) * (count + 1)) ) == NULL ){
                perror("Ошибка памяти!\n");
                exit(1);
            }
            if ( ( words[i].wrd = strdup(buf) ) == NULL ){
                perror("Ошибка памяти!\n");
                exit(1);
            }
            words[i].cnt = 1;
            ++count;
        }
    }
    if ( ferror(f) ){
        perror("Ошибка чтения из файла!\n");
        exit(1);
    }
    fclose(f);
    
    if ( !words || !count ){
        perror("Ошибка чтения из файла!\n");
        exit(1);
    }
    
    printf("\nНайдено %d слов.\nСортировать по\n1 - алфавиту\n2 - количеству\n> ", count);
    scanf("%d", &action);
    switch ( action ){
        case 1 :
            qsort(words, count, sizeof(Wrd_t), wrdcmp);
            break;
        case 2 :
            qsort(words, count, sizeof(Wrd_t), cntcmp);
            break;
    }
    printf("\n%sСлово               Встретилось (раз)\n%s", SEPLINE, SEPLINE);
    for ( i = 0; i < count; ++i )
        printf("%-20s%d\n", words[i].wrd, words[i].cnt);
    printf("%s\n", SEPLINE);
    
    for ( i = 0; i < count; ++i ){
        if ( words[i].wrd != NULL){
            free(words[i].wrd);
            words[i].wrd = NULL;
        }
    }
    free(words);
    words = NULL;
    exit(0);
}
Очень надо. Пытался сам перевести, но какая-то ерунда получается. Спасибо!
1
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2015, 11:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создать словарь слов встречающихся в текстовом файле (C#):

Как выделить в текстовом файле 50 самых часто встречающихся слов?
Как разобрать файл на слова и выделить в нём 50 самых часто встречающихся слов?...

Русификация (перевод слов) столбцов в текстовом файле
Привет.В текстовом файле 4 столбца написанные на английском языке,под ними...

Подсчёт повторяющихся слов в выбранном текстовом файле
Здравствуйте уважаемые форумчане. Помоги чайнику в решении задачи. Необходимо...

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

Как создать словарь из слов текста, используя сплит?
Как создать словарь из слов текста, используя сплит?

В файле создать массив слов, в который поместить каждое слово в отдельную ячейку
Здравствуйте! Только начал вникать в C#! Помогите написать программу для работы...

2
hamin
247 / 235 / 165
Регистрация: 21.11.2012
Сообщений: 788
19.05.2015, 18:36 #2
Лучший ответ Сообщение было отмечено Ruslik_A как решение

Решение

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
private string ReadFile(string location)
        {
            try
            {
                using (StreamReader sr = new StreamReader(location))
                {
                    return sr.ReadToEnd();
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
 
            return null;
        }
 
        private List<string> GetWords(string str)
        {
            char[] separator = new char[7];
            string[] result;
 
            separator[0] = ';';
            separator[1] = ' ';
            separator[2] = '.';
            separator[3] = ',';
            separator[4] = ':';
            separator[5] = '(';
            separator[6] = ')';
 
            result = str.Split(separator, StringSplitOptions.RemoveEmptyEntries);
 
            return new List<string>(result.ToList().Distinct().OrderBy(q => q)); 
        }
 
 
//Вызов:
string str = ReadFile("M://test.txt");
            var list = GetWords(str);
 
foreach (var word in list )
            {
                MessageBox.Show(word);
            }
0
Ruslik_A
1 / 1 / 1
Регистрация: 14.12.2012
Сообщений: 41
19.05.2015, 20:53  [ТС] #3
Спасибо!
А как читать текст из файла так чтобы определять в какой именно строке находится то или иное слово?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2015, 20:53
Привет! Вот еще темы с решениями:

Составить в алфавитном порядке список всех слов, встречающихся в тексте
Помогите пожалуйста с задачей: Дана строка, содержащая текст на русском языке....

Частотный словарь русского языка, список самых частоупотреблямых слов
Всем привет, я ищу такой частотный словарь русского языка (список самых...

Дан текст не более 255 символов. Составить словарь уникальных слов
Добрый вечер! Прошу помочь с заданием, очень нужно. Дан текст не более 255...

Бд в текстовом файле
Вообщем,пишу курсовую ,а в ней необходима бд с пользователями...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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