0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 21
|
|||||||
1 | |||||||
В файле нужно осуществлять поиск21.06.2011, 22:56. Показов 4239. Ответов 32
Метки нет (Все метки)
Вопрос по работе с файлами.
А именно, имеется файл с данными (прайсы). В этом файле нужно осуществлять поиск (по коду товара). Файлик на 6'000'000+ (шесть с лишних лямов) позиций и размером под 300Мб в .txt формате (excel отказался переваривать такое кол-во строк). Ситуация такова, что загрузить его целиком в string не вышло (выбило аутофмэмори), а грузить построчно (что в общем то наиболее удобно для дальнейшего парсинга) в массив ацки долго (на i3 и SATA винтом 1КК строк грузится 3 часа). Актуальность данных файла 1 день (т.е. прайс меняется каждый день). А вопрос таков - как можно загрузить этот файлик в память и потом с ним работать из ОЗУ, либо есть ли какая возможность быстро искать непосредственно в файле и уже потом просто считывать строчку в файле с искомым вхождением? Спасибо за ответы.
0
|
21.06.2011, 22:56 | |
Ответы с готовыми решениями:
32
Как осуществлять поиск без учета регистра? Посоветуйте, как осуществлять быстрый поиск по полям класса? Программа производит поиск по текстовому файлу 1, нужно занулить при поиске те слова, указанные в файле 2 Метод с возможностью осуществлять поиск файлов и папок по имени размеру, датам создания, доступа и модификации |
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 21
|
||||||
24.06.2011, 16:44 [ТС] | 21 | |||||
я понял... еще момент - в файле есть примерно 40 позиций товаров которые разбиты через "\n" на 2 строчки... в своем "мего"-парсере я игнорирую эти строки, а этот код справится с таким?..
Добавлено через 34 минуты так же ниистово ругается на:
отак ругается:
Код
System.Data.OleDb.OleDbException: Data type mismatch in criteria expression. в void System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) в Int32 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object executeResult) в Int32 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object executeResult) в Int32 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object executeResult) в OleDbDataReader System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) в OleDbDataReader System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) в IDataReader System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) в Int32 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) в Int32 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) в Int32 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) как static void autoPrice.autoPriceEngine.LoadPrice(String filePath) в d:\other\autoPrice\autoPrice\Classes.cs:строка 52 как void autoPrice.frmMain.button1_Click(Object sender, EventArgs e) в d:\other\autoPrice\autoPrice\frmMain.cs:строка 27 в void System.Windows.Forms.Control.OnClick(EventArgs e) в void System.Windows.Forms.Button.OnClick(EventArgs e) в void System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) в void System.Windows.Forms.Control.WmMouseUp(Message m, MouseButtons button, Int32 clicks) в void System.Windows.Forms.Control.WndProc(Message m) в void System.Windows.Forms.ButtonBase.WndProc(Message m) в void System.Windows.Forms.Button.WndProc(Message m) в void System.Windows.Forms.Control+ControlNativeWindow.OnMessage(Message m) в void System.Windows.Forms.Control+ControlNativeWindow.WndProc(Message m) в IntPtr System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) в Boolean System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) в void System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) в void System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) в static void System.Windows.Forms.Application.Run(Form mainForm) как static void autoPrice.Program.Main() в d:\other\autoPrice\autoPrice\Program.cs:строка 17
0
|
512 / 298 / 37
Регистрация: 22.06.2011
Сообщений: 929
|
|
24.06.2011, 17:55 | 22 |
Ну сказано же - Data type mismatch in criteria expression
Не совпадение типов. Для текстовых полей заключай в апострафы. Поиграй с типами полей dataTable, попробуй [F2]='045005250' (в апострафах)
0
|
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 21
|
|
04.08.2011, 13:48 [ТС] | 23 |
0
|
512 / 298 / 37
Регистрация: 22.06.2011
Сообщений: 929
|
|
04.08.2011, 13:56 | 24 |
Смотри далее В файле нужно осуществлять поиск
0
|
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 21
|
||||||
04.08.2011, 17:04 [ТС] | 25 | |||||
значит наваял я код:
текст ашипки
System.Data.OleDb.OleDbException: Cannot update. Database or object is read-only.
в void System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) в Int32 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object executeResult) в Int32 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object executeResult) в Int32 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object executeResult) в OleDbDataReader System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) в OleDbDataReader System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) в IDataReader System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehav ior behavior) в Int32 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) в Int32 System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) в Int32 System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) как static void autoPrice.autoPriceEngine.searchPart(Object searchIndex) в d:\other\autoPrice\autoPrice\Classes.cs:строка 616 в static void System.Threading.ThreadHelper.ThreadStart_Context(Object state) в static void System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) в void System.Threading.ThreadHelper.ThreadStart(Object obj)
0
|
512 / 298 / 37
Регистрация: 22.06.2011
Сообщений: 929
|
|
04.08.2011, 17:13 | 26 |
Cannot update. Database or object is read-only
Файл чем-то занят может? или только для чтения? И еще: Либо HDR=NO, либо вместо [F2] имя столбца
0
|
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 21
|
|
04.08.2011, 17:28 [ТС] | 27 |
нет, перепроверил атрибуты и все кто мог обращаться - все ок...
ок, поправил на "HDR=NO"
0
|
512 / 298 / 37
Регистрация: 22.06.2011
Сообщений: 929
|
|
04.08.2011, 18:32 | 28 |
если проблема осталась - выложите сюда файл (или часть) - я попробую написать код (завтра, сейчас по девкам)
0
|
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 21
|
|
04.08.2011, 19:00 [ТС] | 29 |
ссылка на файл:
Добавлено через 12 минут мой код совершает поиск по этому файлу за примерно 12сек... что интересно, то первый поиск после запуска програмы длится долго - порядка 20-30сек, а каждый следующий быстрее... вплоть до 7-8сек.. О_о
0
|
512 / 298 / 37
Регистрация: 22.06.2011
Сообщений: 929
|
|
05.08.2011, 09:04 | 30 |
Не работает с таким именем файла. test.csv и test.txt работают
0
|
0 / 0 / 0
Регистрация: 21.06.2011
Сообщений: 21
|
|
05.08.2011, 19:06 [ТС] | 32 |
и как по перформансу?
у меня кстати не получилось ничего найти... гдето чтото косячу...
0
|
05.08.2011, 21:32 | 33 | |||||
Следующий код ищет за 3.8сек.
Сделано для .NET 4, в более ранних версиях .AsParallel().WithDegreeOfParallelism( 2 ) можно убрать.
1
|
05.08.2011, 21:32 | |
05.08.2011, 21:32 | |
Помогаю со студенческими работами здесь
33
Осуществлять поиск в файле необходимых дат Какими средствами осуществлять поиск в doc-файле? Как в среде VISUAL C++ 2008 осуществлять поиск текста в файле WORD ? Нужно исправить поиск по имени в файле Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |