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

Одновременная работа с документами - C++

Восстановить пароль Регистрация
 
inferno mf
1 / 1 / 0
Регистрация: 13.09.2009
Сообщений: 96
02.11.2010, 00:51     Одновременная работа с документами #1
Доброго всем! Можете помочь разобраться с такой задачей. Вот у меня допустим есть метод для поиска какой-то строки в файле. Как это реализовать для работы с несколькими файлами одновременно? Т.е. чтобы я открывал несколько файлов и одновременно искал в них эту строку?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
02.11.2010, 00:53     Одновременная работа с документами #2
для каждого файла создайте свой дискриптор
C++
1
2
3
4
FILE* f1.....
FILE* f1.....
......
FILE *fn.....
и потом открывайте их всех, далее с помощью цикла перебирайте файлы и ищите, в конце не забудьте все закрыть
inferno mf
1 / 1 / 0
Регистрация: 13.09.2009
Сообщений: 96
02.11.2010, 01:06  [ТС]     Одновременная работа с документами #3
Цитата Сообщение от Crudelis Посмотреть сообщение
для каждого файла создайте свой дискриптор
C++
1
2
3
4
FILE* f1.....
FILE* f1.....
......
FILE *fn.....
и потом открывайте их всех, далее с помощью цикла перебирайте файлы и ищите, в конце не забудьте все закрыть
это подходит для заранее заданного количества файлов? если я хочу скажем ввести в консоль определенное кол-во файлов, такой способ подойдет? просто понятия не имею об этих дискрипторах.
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
02.11.2010, 01:10     Одновременная работа с документами #4
inferno mf, количество файлов не ограничено, файлы ты можешь вводить руками, можешь вводить путь к файлу с консоли, как угодно
inferno mf
1 / 1 / 0
Регистрация: 13.09.2009
Сообщений: 96
02.11.2010, 02:38  [ТС]     Одновременная работа с документами #5
Цитата Сообщение от Crudelis Посмотреть сообщение
inferno mf, количество файлов не ограничено, файлы ты можешь вводить руками, можешь вводить путь к файлу с консоли, как угодно
Т.е. Я скажем ввожу с клавиатуры N файлов. Потом задаю этот дескриптор

C++
1
FILE *N
Затем иду в цикле от 1 до N . И после описываю скажем некоторые методы (поиск подстроки в файле, удаление какой-то строки из файла). Так?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.11.2010, 03:49     Одновременная работа с документами #6
C
1
2
3
4
5
6
7
8
9
10
11
12
    FILE *fp[10];
    int i;
 
    for (i = 0; i < 3; i++) {
        char name[100];
        sprintf(name, "file%d.txt", i + 1);
        fp[i] = fopen(name, "r");
        if (fp[i] == NULL) {
            fprintf(stderr, "error: can't open file #%d" "\n", i);
            break;
        }
    }
C89, C99
FOPEN_MAX

which expands to an integral constant expression that is the minimum
number of files that the implementation guarantees can be open
simultaneously;
почему-то minimum, хотя по логике maximum должно быть
inferno mf
1 / 1 / 0
Регистрация: 13.09.2009
Сообщений: 96
04.11.2010, 23:56  [ТС]     Одновременная работа с документами #7
Цитата Сообщение от accept Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
    FILE *fp[10];
    int i;
 
    for (i = 0; i < 3; i++) {
        char name[100];
        sprintf(name, "file%d.txt", i + 1);
        fp[i] = fopen(name, "r");
        if (fp[i] == NULL) {
            fprintf(stderr, "error: can't open file #%d" "\n", i);
            break;
        }
    }
C89, C99

почему-то minimum, хотя по логике maximum должно быть
тут 10 - это кол-во файлов? А можно его задать через N и ввести с клавиатуры?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2010, 06:32     Одновременная работа с документами #8
10 - это максимальное количество одновременно открытых файлов, оно не должно быть большим, потому что переносимо только количество равное FOPEN_MAX

C
1
    printf("%d" "\n", FOPEN_MAX);
пример

C
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(void)
{
    printf("%d" "\n", FOPEN_MAX);
    return 0;
}
Код
[guest@localhost tests]$ ./t
16
[guest@localhost tests]$


а вот 3 - это количество открываемых файлов, его можно ввести с клавиатуры

C
1
2
3
4
5
6
7
    int nfiles;
 
    if (scanf("%d", &nfiles) != 1)
        return EXIT_FAILURE;
 
    for (i = 0; i < nfiles; i++) {
        ...
inferno mf
1 / 1 / 0
Регистрация: 13.09.2009
Сообщений: 96
13.11.2010, 02:47  [ТС]     Одновременная работа с документами #9
Возникла проблема... программа должна принимать от пользователя строку, записывает её в не сколько файлов сразу, а затем её оттуда читать, но не делает этого. В чем беда? Можете на примере какую-нибудь другую простейшую операцию привести, например поиск строки в файлах или ее удаление?

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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    
    
    char n[256];
    cout << "Input string: ";
    cin >> n;
    
      FILE *fp[10];
      int i;
 
    for (i = 0; i < 3; i++) {
        char name[100];
        sprintf(name, "file%d.txt", i + 1);
        fp[i] = fopen(name, "r");
        
        for (int i=0;n[i] != 0; i++)
    {
        putc(n[i],fp[i]);
    }
    fseek(fp[i],0,SEEK_SET);//ïåðåõîä Г*Г* Г*óëåâîé ГЎГ*éò îò Г*Г*Г·Г*Г«Г* ГґГ*éëГ*
    for (int i=0; i < 256; i++) 
    {
        n[i]=0;
    }
    cout << endl<<endl;
    int c;
    for (int i=0;(c=getc(fp[i])) != EOF;i++)
    {
    n[i]=static_cast<char>(c);    
    }
    cout<<"n="<<n<<endl;
    
    
    
        
        if (fp[i] == NULL) {
            fprintf(stderr, "error: can't open file #%d" "\n", i);
            break;
        }
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.11.2010, 08:34     Одновременная работа с документами #10
чтобы записывать в файл, нужно открыть его для записи (можно открывать для чтения и записи "r+" или "w+")
если хочешь, чтобы файл создавался, если его нет, нужно "w+" (но существующий файл будет усекаться)
inferno mf
1 / 1 / 0
Регистрация: 13.09.2009
Сообщений: 96
05.12.2010, 17:32  [ТС]     Одновременная работа с документами #11
можно все это реализовать как-то по-другому? ну т.е. нужна именно параллельная работа с документами.

или такое решение верное?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2010, 00:29     Одновременная работа с документами
Еще ссылки по теме:

Работа с документами word C++
Одновременная блокировка/разблокировка функционала программы C++

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

Или воспользуйтесь поиском по форуму:
inferno mf
1 / 1 / 0
Регистрация: 13.09.2009
Сообщений: 96
08.12.2010, 00:29  [ТС]     Одновременная работа с документами #12
можно ли реализовать как-то по-другому? нужна именно параллельная работа с документами...
Yandex
Объявления
08.12.2010, 00:29     Одновременная работа с документами
Ответ Создать тему
Опции темы

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