Xray
Гость
|
|
« : 08-07-2009 10:47 » |
|
Нужен простейший скрипт(в программировании не разбираюсь) для выделения из огромного текстового файла определенного куска, файл содержит данные типа даты, время (ггггммччвввв) и 4 числа через пробелы , т.е например: 200904130215 0.72195 0.72195 0.72175 0.72175 200904130216 0.72175 0.72185 0.72175 0.72185 200904130217 0.72185 0.72185 0.72185 0.72185 200904130218 0.72185 0.72185 0.72185 0.72185 200904130219 0.72185 0.72185 0.72175 0.72185 200904130220 0.72185 0.72205 0.72185 0.72195 200904130221 0.72195 0.72195 0.72185 0.72185
Надо чтобы допустим из этого примера вырезать 200904130217 0.72185 0.72185 0.72185 0.72185 200904130218 0.72185 0.72185 0.72185 0.72185 200904130219 0.72185 0.72185 0.72175 0.72185
Спасибо
|
|
|
Записан
|
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #1 : 08-07-2009 11:01 » |
|
Нужен простейший скрипт(в программировании не разбираюсь) Так это тебе работника искать надо...
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 08-07-2009 11:02 » |
|
Надо чтобы допустим из этого примера вырезать 200904130217 0.72185 0.72185 0.72185 0.72185 200904130218 0.72185 0.72185 0.72185 0.72185 200904130219 0.72185 0.72185 0.72175 0.72185
а по какому критерию вырезано то ? За числа определённые ?
|
|
|
Записан
|
|
|
|
Xray
Гость
|
|
« Ответ #3 : 08-07-2009 11:02 » |
|
А что местных умельцев нет? (хотя бы подсказать в каком направлении работать)
|
|
|
Записан
|
|
|
|
Xray
Гость
|
|
« Ответ #4 : 08-07-2009 11:03 » |
|
Надо чтобы допустим из этого примера вырезать 200904130217 0.72185 0.72185 0.72185 0.72185 200904130218 0.72185 0.72185 0.72185 0.72185 200904130219 0.72185 0.72185 0.72175 0.72185
а по какому критерию вырезано то ? За числа определённые ? Да с определенного числа и времени по определенное число и время
|
|
|
Записан
|
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #5 : 08-07-2009 11:15 » |
|
хотя бы подсказать в каком направлении работать Хоть операционка какая? И насколько большой файл? сколько в нем строк? Можно тупо импортировать в ексель и вырезать руками или макросом.
|
|
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Xray
Гость
|
|
« Ответ #6 : 08-07-2009 11:22 » |
|
хотя бы подсказать в каком направлении работать Хоть операционка какая? И насколько большой файл? сколько в нем строк? Можно тупо импортировать в ексель и вырезать руками или макросом. В том то и проблема, что файл огромный и при загрузке в ексель, пишет что файл загружен не полностью, размер этого текстового файла примерно 9.5 МБ. Операционка winda 2003
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #7 : 08-07-2009 11:25 » |
|
Ну, если весь файл состоит из таких записей, то проще всего, имхо, с помощью регулярного выражения вырезать дату в каждой строке и проверять на попадание в диапазон. Сравнение - хоть в строковой форме: в таком формате даты будут соблюдать лексикографический порядок. Если файл отсортирован по времени, то сначала искать начало диапазона (соответственно, проверять, что дата больше или равна заданной начальной), а затем "вырезать" до тех пор, пока не будет достигнут конец диапазона (проверять, что дата меньше или равна заданной конечной).
Делать любым скриптовым языком.
|
|
|
Записан
|
|
|
|
Xray
Гость
|
|
« Ответ #8 : 08-07-2009 11:25 » |
|
сколько в нем строк?
Больше 65536
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #9 : 08-07-2009 11:38 » |
|
А чего тут работать?
1. Разбиваем текст на строки (надеюсь признак конца строки 0x0d 0x0a ?)
2. бежим по всему массиву и ищем начало блока. Критерий поиска у тебя есть - проверка на совпадение начала каждой строки с образцом известной длины, в твоём примере - "200904130217".
3. Если нашли, отправляем эту и следующие строки в буфер пока не найдём конец блока (аналагично п.2). Найденая таким образом строка (элемент массива) тоже отправляется в буфер.
4. Повторяем пока элементы массива не кончатся, или пока не найдём конец блока. Ну тут уже тебе решать, что делать если конец не найден.
5. Всё
зы Да, забыл. Буфер сохраняем в файл или делаем с ним что надо.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #10 : 08-07-2009 11:45 » |
|
Если была бы *nix система, то можно было бы обратить внимание на программу split. Ну и на худой конец sed или awk.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Sla
|
|
« Ответ #11 : 08-07-2009 11:49 » |
|
for /F "tokens=1,2,3,4,5 delims= " %%i in (my_file.txt) do if /i not %%j == %%m @echo %%i %%j %%k %%l %%m
|
|
« Последнее редактирование: 08-07-2009 11:54 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #12 : 08-07-2009 11:51 » |
|
главное знать условия отбора я увидел только то, что второе поле равно последнему
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #13 : 08-07-2009 11:52 » |
|
Да с определенного числа и времени по определенное число и время
аааа!!
анализируем %%i
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #14 : 08-07-2009 11:54 » |
|
извините забыл bat- файл
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #15 : 08-07-2009 11:54 » |
|
Xray, такой файл можно импортировать в Access, а далее есть визуальное создание запросов.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Xray
Гость
|
|
« Ответ #16 : 08-07-2009 11:54 » |
|
Ну, если весь файл состоит из таких записей, то проще всего, имхо, с помощью регулярного выражения вырезать дату в каждой строке и проверять на попадание в диапазон. Сравнение - хоть в строковой форме: в таком формате даты будут соблюдать лексикографический порядок. Если файл отсортирован по времени, то сначала искать начало диапазона (соответственно, проверять, что дата больше или равна заданной начальной), а затем "вырезать" до тех пор, пока не будет достигнут конец диапазона (проверять, что дата меньше или равна заданной конечной).
Делать любым скриптовым языком.
главное знать условия отбора я увидел только то, что второе поле равно последнему
Условия простые: От одной даты до другой, 4 последующих числа - рандомные и не важны(просто может пример не удачный)
|
|
|
Записан
|
|
|
|
Xray
Гость
|
|
« Ответ #17 : 08-07-2009 12:00 » |
|
Xray, такой файл можно импортировать в Access, а далее есть визуальное создание запросов.
Данный файл не распознается в Access(а если быть точнее: 1 колонка (дата и время) не експортятся)
|
|
« Последнее редактирование: 08-07-2009 12:11 от Xray »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #18 : 08-07-2009 12:12 » |
|
Xray, я уже все написал, тебе только подправить, мой код нужно только чуть-чуть допилить до нужного
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Xray
Гость
|
|
« Ответ #19 : 08-07-2009 12:16 » |
|
Sla, Этот код for /F "tokens=1,2,3,4,5 delims= " %%i in (my_file.txt) do if /i not %%j == %%m @echo %%i %%j %%k %%l %%m вообще куда вбивается
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #20 : 08-07-2009 12:18 » |
|
есть такое командная строка в ней работают bat файлы, cmd файлы
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Вад
|
|
« Ответ #21 : 08-07-2009 12:22 » |
|
Тупая реализация на Perl для упорядоченного по времени файла (без оптимизации, будет выполнять 2 сравнения для каждой строки): if (@ARGV > 1) { my $date1 = shift; my $date2 = shift; while(<>) { my ($dat) = /^(\d+)/; if ($dat gt $date2){ last; } elsif ($dat ge $date1){ print; } } } 2 параметра командной строки - даты начала и конца отрезка в том же формате, что и в файле (типа 200904130215)
|
|
« Последнее редактирование: 08-07-2009 12:25 от Вад »
|
Записан
|
|
|
|
Xray
Гость
|
|
« Ответ #22 : 08-07-2009 12:23 » |
|
есть такое командная строка в ней работают bat файлы, cmd файлы
А ты можешь по моему 1 примеру (см. топ) выписать код, тогда я думаю разберусь
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #23 : 08-07-2009 12:49 » |
|
Xray, такой файл можно импортировать в Access, а далее есть визуальное создание запросов.
Данный файл не распознается в Access(а если быть точнее: 1 колонка (дата и время) не експортятся) Легко!!! Импорт. *.txt С разделителями - пробел. Тип полей - текстовые. Выборка: SELECT Test.* FROM Test WHERE (((Test.Поле1) Between '200904130200' And '200904130220')) ORDER BY Test.Поле1;
|
|
« Последнее редактирование: 08-07-2009 12:53 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
PooH
Глобальный модератор
Offline
Пол:
... и можно без хлеба!
|
|
« Ответ #24 : 08-07-2009 12:55 » |
|
Больше 65536 Эксель 2007 умеет работать с более чем 1млн. строк на листе. Больше строк и столбцов и другие новые ограничения Чтобы можно было исследовать большие объемы данных на листах, Office Excel 2007 поддерживает листы размером до одного миллиона строк и 16-ти тысяч столбцов. Так сетка Office Excel 2007 состоит из 1 048 576 строк и 16 384 столбцов, что обеспечивает увеличение числа строк на 1500% и столбцов на 6300% по сравнению с приложением Microsoft Office Excel 2003. И вот почему: нумерация столбцов теперь оканчивается на XFD вместо IV.
|
|
« Последнее редактирование: 08-07-2009 12:57 от PooH »
|
Записан
|
Удачного всем кодинга! -=x[PooH]x=-
|
|
|
Sla
|
|
« Ответ #25 : 08-07-2009 12:56 » |
|
упс.... не работает for /F "tokens=1,2,3,4,5 delims= " %%i in (%1) do if /i '%%i' GTR '%2' (echo 111) else echo 000 Подставляю EQU - работает GTR не работает запускаю proba.bat my_file.txt 20090413020 если кому нужна справка hh ntcmds.chm
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #26 : 08-07-2009 13:27 » |
|
1. создать файл test.bat следующего содержания for /F "tokens=1,2,3,4,5 delims= " %%i in (%1) do ( if /i '%%i' GTR '%2' (if /i '%%i' LSS '%3' @echo %%i %%j %%k %%l %%m ))
запустить из командной строки test.bat <имя файла> <дата первая> <дата вторая> на приведенных данных работает test.bat my_file.txt 200904130217 200904130220
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #27 : 08-07-2009 14:25 » |
|
В Windows есть такая штатная вещь, как WSH (Windows Script Host). Можно вот этот код: Const ForReading = 1, ForWriting = 2 Dim FileSystemObject, InputFile, OutputFile Set FileSystemObject = CreateObject("Scripting.FileSystemObject") Source = WScript.Arguments(0) Destination = Source + "_Result.txt" Set InputFile = FileSystemObject.OpenTextFile(Source, ForReading) Set OutputFile = FileSystemObject.OpenTextFile(Destination, ForWriting, True) MinDate = CDbl(InputBox("Введи минимальную дату в формате ГГГГММДДччмм", "Фильтр данных")) MaxDate = CDbl(InputBox("Введи максимальную дату в формате ГГГГММДДччмм", "Фильтр данных")) While Not InputFile.AtEndOfStream Line = InputFile.ReadLine DateInLine = CDbl(Split(Line, " ")(0)) If DateInLine >= MinDate And DateInLine <= MaxDate Then Call OutputFile.WriteLine(Line) End If Wend Call InputFile.Close Call OutputFile.Close WScript.Echo("Результат записан в файл " + Destination) Записать в файл с расширением vbs, например filter.vbs Затем в проводнике перетащить мышью файл с данными на этот созданный файл. Запустится скрипт, который будет обрабатывать "брошенный" на него текстовый файл. Кроме того скрипт запросит у юзера даты диапазона фильтрации.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Xray
Гость
|
|
« Ответ #28 : 08-07-2009 14:39 » |
|
Dimka, СПАСИБО ОГРОМНОЕ, ТЫ просто гений!!!! респект тебе!
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #29 : 09-07-2009 07:54 » |
|
Ну раз пошла такая пьянка... Xray, держи фирменный софт.
|
|
« Последнее редактирование: 09-07-2009 08:03 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
|