Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2011, 14:45   #1
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
Вопрос Работа с файлами

Здравствуйте, возникла проблема при работе с файлами.
Мне нужно с помощью MPI распараллелить поиск в файле по маске (по * и по ?).
До самого MPI еще не дошел, пока думаю, как вообще мне это осуществить...
Застрял, хочу работать с файлом как со строкой, то есть скопировать файл в строку. Пока нет идей, как это можно сделать...
fgets не помогает...
Если я пишу что-то типа:
Код:
while(!feof(InF))
{
fgets(str,10000,InF);
//тут еще куча обработок
//всяких разных 
//тестовых :)
};
то нифига не пашет
10000 - это явно больше моего файла, при отладке видно, что обрабатывается примерно по 100 символов... как это исправить то? Или как мне указатель, куда fgets положит вырезанные символы, смещать постоянно?

Для чего мне это нужно? Для параллельного поиска в будущем, чтоб можно было выбирать диапазон строки с захлестом, иначе может получиться так, что искомая подстрока порежется на две части.
Zeneth вне форума Ответить с цитированием
Старый 09.06.2011, 14:54   #2
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

извините, но накуя вам искать символы параллельно? мне так для себя. чисто поржать

а по делу, вот что могу посоветовать:

Код:
		file_in = new ifstream("имя");
		if(!(*file_in))
		{
			cout << "I can't find or open file: " << fname << endl;
			return false;
		}
		f_in = new strstream();
		char ch;

		while (file_in->get(ch))
		{
			*f_in << ch;
		};
таким макаром вы скопируете содержимое файла в буфер.

далее надо бы создать (например у вас 4 ядра) 4 строки размером ну грубо говоря
f_in / 4. проверить каждую подстроку на вхождение вашей искомой комбинации.
далее, например длина вашей комбинации 10 символов.
отрезаем 9 символов от конца первой подстроки и приклеиваем к первым 9 второй подстроки. получившуюся подстроку (18 симвАлАФ) проверем на вхождение вашей комбинации. ну и с остальными так же.
Kukurudza вне форума Ответить с цитированием
Старый 09.06.2011, 15:03   #3
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
По умолчанию

Да вот мне, как раз незачем, и сам я смутно понимаю зачем это вообще может быть нужно...
Но увы.. лаба звучит именно так...

На счет кода, пока немного не понял его... не работал я с буфером...
Сейчас буду разбираться. Спасибо, что откликнулись
Цитата:
далее надо бы создать (например у вас 4 ядра) 4 строки размером ну грубо говоря
f_in / 4. проверить каждую подстроку на вхождение вашей искомой комбинации.
далее, например длина вашей комбинации 10 символов.
отрезаем 9 символов от конца первой подстроки и приклеиваем к первым 9 второй подстроки. получившуюся подстроку (18 симвАлАФ) проверем на вхождение вашей комбинации. ну и с остальными так же.
а это мне понятно было, только до этого далеко еще
Zeneth вне форума Ответить с цитированием
Старый 09.06.2011, 15:17   #4
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

забыл библиотеку:
#include "strstream"

что не понятно по коду? могу прокомментировать
Kukurudza вне форума Ответить с цитированием
Старый 09.06.2011, 15:33   #5
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
По умолчанию

Если вам не сложно, прокомментируйте.
Во первых, каких типов должны быть file_in и f_in ?
в
Код:
new ifstream("имя")
Имя - путь к файлу?
Сорри за глупые вопросы... в голове каша уже...
Заранее спасибо
Zeneth вне форума Ответить с цитированием
Старый 09.06.2011, 15:46   #6
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

пардон

ifstream *file_in;
strstream *f_in;

да это путь, например "file.txt"
Kukurudza вне форума Ответить с цитированием
Старый 09.06.2011, 16:00   #7
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
По умолчанию

В таком случае компилятор начинается ругаться следующим образом:
1 IntelliSense: отсутствует оператор "=", соответствующий этим операндам
и так далее... вообще не пойму пока... ищу описание работы с этими потоками....

Последний раз редактировалось Zeneth; 09.06.2011 в 16:02. Причина: Очепятки
Zeneth вне форума Ответить с цитированием
Старый 09.06.2011, 16:08   #8
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

так:

Код:
// Test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <math.h>
#include "strstream"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	ifstream *file_in;
	strstream *f_in;

	file_in = new ifstream("temp.txt");
	if(!(*file_in))
	{
		cout << "I can't find or open file: " << endl;
		return false;
	}
	f_in = new strstream();
	char ch;

	while (file_in->get(ch))
	{
		*f_in << ch;
	};

	cout << f_in->rdbuf();

	system("pause");

	return 0;
}

Последний раз редактировалось Kukurudza; 09.06.2011 в 16:13.
Kukurudza вне форума Ответить с цитированием
Старый 09.06.2011, 16:09   #9
Zeneth
Пользователь
 
Регистрация: 16.06.2009
Сообщений: 21
По умолчанию

Сорри, не там объявил, все заработало, только теперь на строчке
Код:
f_in << ch;
вылетает с вот этим:
Run-Time Check Failure #3 - The variable 'f_in' is being used without being initialized.
Zeneth вне форума Ответить с цитированием
Старый 09.06.2011, 16:16   #10
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

точно все правильно скопировали? f_in не инициализирован.
Kukurudza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с файлами Анюта01 Фриланс 8 19.03.2010 22:41
Работа с файлами newkobra Общие вопросы C/C++ 9 15.03.2010 22:03
работа с файлами в Си серг Помощь студентам 2 04.02.2010 09:07
Работа с файлами NightFire Паскаль, Turbo Pascal, PascalABC.NET 5 17.05.2009 21:47
Работа с файлами DJ Socol Win Api 1 17.07.2007 09:18