Компоненты встроенного в Windows механизма полнотекстового поиска можно использовать не только по их прямому назначению. Мало кто знает, но эта возможность позволяет легко решать задачу получения текста из файлов почти любого формата, который поддерживается системой (а поддерживается очень большое их количество). Так как для выполнения полнотекстового поиска первичной задачей является выделение чистого текста из исходного файла в Windows такая возможность уже реализована. Встроенный поиск работает замечательно с большинством поддерживаемых форматов. За получение текста из файлов отвечает набор классов, реализующих интерфейс IFilter. Где же взять эти классы? Как правило нигде их брать не нужно, все устанавливается автоматически с различными приложениями. К примеру, если вы установили в своей системе OpenOffice то нужный фильтр у вас уже есть. Интересно что при установке MS Office Professional появляется возможность выделять текст из TIFF файлов!!! Мы были в шоке когда на это наткнулись в первый раз
Можно установить фильтры и отдельно от приложений. Несколько бесплатных фильтров, которые могут быть полезны, можно найти на IFilter.org Для того, чтобы посмотреть список установленных фильтров можно воспользоваться простой утилитой от citeknet.com(ссылка на приложение в конце статьи) Как же это все можно использовать в реальных программах? Не буду изобретать велосипед - Eyal Post в своей статье на CodeProject поделился с нами исходными текстами “обертки” на C#, позволяющей легко, при помощи всего одного вызова автоматически распознавать формат указанного файла, загружать подходящий объект и выделять из него текст. Кроме того уже решены некоторые проблемы с многопоточностью и возможной утечкой памяти. Мы применяем эту библиотеку в реальном проекте уже более года – каких то проблем в ней не выявлено. Хотя есть у этой реализации и недостаток: Изначально IFilter позволяет использовать не только файлы, хранимые на диске но и массивы данных в оперативной памяти. Обертка, о которой говорилось выше работу с данными в памяти не поддерживает. Использовать класс очень просто. Вот пример: 1: TextReader reader=new FilterReader(fileName);
2: using (reader)
3: {
4: textBox1.Text=reader.ReadToEnd();
5: }
На вход подается имя файла, на выходе получаем текст. Обратите внимание – тип файла определяется по его расширению. Более сложные примеры применения я описывать не буду, смотрите в статье на CodeProject. Ниже представлен screenshot окна тестового приложения с CodeProject, которое позволяет продемонстрировать работу класса вживую на вашей системе Ссылки:
IFilter.org
IFilter Explorer
Статья, в которой описана реализация работы с IFilter
Файлы к статье (для тех, кто не зарегистрирован на CodeProject)
Microsoft обновляет свою страницу посвященную open source проектам компании. Наконец-то, появился единый ресурс и каталог всех open source проектов компании в одном месте. Многие с удивлением откроют для себя, что таких проектов десятки. Ссылки: страница Microsoft Open Source http://www.microsoft.com/opensource/default.aspx
полный список open source проектов от Microsoft http://www.microsoft.com/opensource/directory.aspx
twitter @OpenAtMicrosoft http://www.twitter.com/openatmicrosoft
Практическая польза данной статьи, научиться быстро начать работу с SSL сертификатами при помощи программы OpenSSL. Разумеется, выпуском сертификатов занимаются специальные центры сертификации, и Вам не стоит задумываться о тонкостях создания…
Этот черновик содержит 3 раздела (из 10) электронной книги, которая будет доступна летом. Эти три раздела относятся к второй части "Moving from Microsoft Visual Studio 2005 to Visual Studio 2010."
Читать полностью
Если вы хотите получить диаграмму последовательности для некого кода, вам необходимо в контекстном меню выбрать "Generate Sequence Diagram". Читать полностью
Ни для кого не секрет, что перевод на русский язык MSDN, да и некоторых программ (в особенности в которых много разных терминов) оставляет желать лучшего. Про MSDN и говорить не приходится – ужас еще тот, чего только "вложенное свойство зависимости" стоит. При этом на сам перевод потрачено очень и очень много денег. Сам перевод осуществлялся очень просто: сначала были переведены все основные термины (и переведены неверно, так как хоть в переводе и учавствовали технические специалисты, но не во всех областях). Затем был осуществлен машинный перевод. И этот машинный перевод уже "доводился" до ума обычными переводчиками (не программистами). Отсюда и такое качество. Но с другой стороны …
Этот сообщение зеркалируется. Читать далее …
Перейти в основной блог.
Добавить комментарий.
Задача состоит в том что нужно из базы данных перегнать данные из таблицы в текстовый документ и при этом сделать так что бы этим мог пользоваться обычный пользователь когда ему это нужно. Создаем пакет на основе SSIS на этом заострять внимание не буду. В нем имеем 4 переменные “filename” – имя файла, “path” – путь где будут располагаться выгруженные файлы, “dateB” и “dateE” дата начала и дата окончания забыл упомянуть в базе находиться таблица в нем находиться поле date (дата) а необходимо выгружать данные по определенную дату, и так 4 переменные в SSIS пакете типа String( ).
Запускаем Visual Studio создаем WebApplication. Добавляем на главную страницу два календаря CalendarDateB и CalendarDatE соответственно дата начала и дата конец , один GridView для просмотра информации перед выгрузкой он просто подсоединен к к базе с двумя параметрами для отбора даты. Два текст бокса TextBoxPath и filenameTBX путь к файлу и имя файла, кнопку “Выгрузка” и последнее один Lable для сообщение о выполнении пакета. Получается приблизительно такая картина
Поехали дальше Пакет я разместил в хранилище пакетов на SQL SERVER. Но можно размещать и в файловой системе.
Теперь нам нужно добавить в проект referencese “Microsoft.SqlServer.Dts.DtsClient” у меня библиотека лежит в C:\Program Files\Microsoft SQL Server\100\DTS\Binn\Microsoft.SqlServer.Dts.DtsClient.dll
В кодовый файл главной страницы вставляем код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Microsoft.SqlServer.Dts.DtsClient; namespace OSMPInterface
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TextBoxPath.Text = @"C:\1\";
filenameTBX.Text = DateTime.Now.ToShortDateString();
} protected void GridView1_DataBound(object sender, EventArgs e)
{
decimal valuest = 0;
foreach (GridViewRow row in GridView1.Rows)
{ decimal summ = Decimal.Parse(row.Cells[4].Text); valuest += summ; GridViewRow footer = GridView1.FooterRow;
footer.Cells[4].Text = valuest.ToString("C");
footer.Cells[3].Text = "Итого";
}
} protected void Button1_Click(object sender, EventArgs e)
{
string dtexecArgs;
string filename;
string path;
string dateB;
string dateE; DtsConnection dtsConnection;
DtsCommand dtsCommand;
DtsDataParameter dtsParameter; dtexecArgs = @"/DTS ""\MSDB\OSMP""";
filename = filenameTBX.Text.ToString();
path = TextBoxPath.Text.ToString();
dateB = CalendarDateB.SelectedDate.Date.ToString();
dateE = CalendarDateE.SelectedDate.Date.ToString();
//Подсоединяемся к пакету посмотреть можно в самам пакете последняя вкладка команда выполнения
dtsConnection = new DtsConnection();
{
dtsConnection.ConnectionString = dtexecArgs;
dtsConnection.Open();
}
dtsCommand = new DtsCommand(dtsConnection); //Передаем значения переменных пакету SSIS dtsParameter = new DtsDataParameter("filename", DbType.String);
dtsParameter.Direction = ParameterDirection.Input;
dtsCommand.Parameters.Add(dtsParameter);
dtsParameter.Value = filename; dtsParameter = new DtsDataParameter("path", DbType.String);
dtsParameter.Direction = ParameterDirection.Input;
dtsCommand.Parameters.Add(dtsParameter);
dtsParameter.Value = path; dtsParameter = new DtsDataParameter("dateB", DbType.DateTime);
dtsParameter.Direction = ParameterDirection.Input;
dtsCommand.Parameters.Add(dtsParameter);
dtsParameter.Value = dateB; dtsParameter = new DtsDataParameter("dateE", DbType.DateTime);
dtsParameter.Direction = ParameterDirection.Input;
dtsCommand.Parameters.Add(dtsParameter);
dtsParameter.Value = dateE; //Выполняем пакет try
{
dtsCommand.ExecuteNonQuery();
Label1.Text = "Пакет выполнен успешно";
}
catch
{
Label1.Text = "Пакет не выполнен";
}
}
}
} Вот и все осталось только настроить права на папку куда вы выгружаете файлы.
Да мой совет включите логи в SSIS пакете что бы в случае ошибки вы могли посмотреть в чем она.
Если интересно вот ссылка http://msdn.microsoft.com/ru-ru/library/aa337077.aspx
Цитата “На первый взгляд все кажется сложным”
Recent Comments