View previous topic :: View next topic |
Author |
Message |
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Tue Dec 16, 2008 14:25 Post subject: |
|
|
Batya
Quote: | Задача - сравнить два списка и сформировать третий, включающий элементы, существующие во втором списке, но отсутствующие в первом? |
Чаще необходимо достроить список не имея полного.
Bomm
Quote: | ..они выводятся "крякозябликами", какую бы кодовую страеницу не выберешь |
Такая же проблема. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 16, 2008 14:54 Post subject: |
|
|
_Johm wrote: | Чаще необходимо достроить список не имея полного. |
Т.е. необходимо для списка сформировать другой список, содержащий недостающие в первом списке элементы?
Если так, то сформулируй четкий критерий последовательности.
Правильно я понимаю, что это - последовательность чисел между заданными частями (начало и окончание) элементов списка (имен файлов)?
Как интерпритировать появление в списке элементов, у которых начало и/или окончание не совпадает с заданным? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 16, 2008 15:48 Post subject: |
|
|
Из того, что пока понял по задаче, слепил vbs-скрипт:
Code: | '==============================================================================
' Формирование списка отсутствующих в последовательности элементов
'==============================================================================
Option Explicit
'===== Изменяемые параметры ===================================================
Dim InFile, OutFile, Prefix, Postfix
With WScript
InFile = .Arguments(0)
OutFile = .Arguments(1)
Prefix = .Arguments(2)
Postfix = .Arguments(3)
End With
'==============================================================================
Dim Dic, FSO, List, l, i, m, Str, LenPrefix, LenPostfix
Set Dic = CreateObject("Scripting.Dictionary")
Set FSO = CreateObject("Scripting.FileSystemObject")
LenPrefix = Len(Prefix)
LenPostfix = Len(Postfix)
List = FSO.OpenTextFile(InFile).ReadAll
For Each l In Split(List, vbNewLine)
If (UCase(Left(l, LenPrefix )) = UCase(Prefix )) And _
(UCase(Right(l, LenPostfix)) = UCase(Postfix)) Then
m = CInt(Mid(l, LenPrefix + 1, Len(l) - LenPrefix - LenPostfix))
Dic.Add m, l
End If
Next
For i = Min(Dic.Keys) To Max(Dic.Keys)
If Not Dic.Exists(i) Then
Str = Str & vbNewLine & prefix & i & postfix
End If
Next
Str = Mid(Str, Len(vbNewLine) + 1)
FSO.CreateTextFile(OutFile, True).Write Str
Quit
Function Max(pArr)
Dim lE, lM
lM = pArr(0)
For Each lE In pArr
If lE > lM Then lM = lE
Next
Max = lM
End Function
Function Min(pArr)
Dim lE, lM
lM = pArr(0)
For Each lE In pArr
If lE < lM Then lM = lE
Next
Min = lM
End Function
Sub Quit
Set Dic = Nothing
Set FSO = Nothing
WScript.Quit
End Sub |
Скрипт запускается с четырьмя параметрами:
1 - исходный список-последовательность,
2 - выходной список-последовательность,
3 - начало элемента,
4 - окончание элемента.
Например: Code: | "existing_files.txt" "missing_files.txt" "str _" "_ end.test" |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Tue Dec 16, 2008 17:46 Post subject: |
|
|
Завидую я вам, скриптописатели! Спасибо, Batya, все отлично работает. Впринципе решений достаточно. Тема раскрыта.
Единственное что хотелось бы в идеале:
создание выходного списка, когда входные данные - выделенные файлы на панели. Плагин Sequences имеет подходящий алгоритм, но, как упомняналось выше, он не умеен сохранять недостающие. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 16, 2008 18:12 Post subject: |
|
|
_Johm wrote: | создание выходного списка, когда входные данные - выделенные файлы на панели. |
При вызове из TC первый параметр - %L. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Tue Dec 16, 2008 19:16 Post subject: |
|
|
Тогда надо, автоматизировать:
искать недостающие элементы в выделении с одинаковым количеством символов
выделение:
a01
a02
a04
ab55
обрабатываются только первые три
, плюс автоматом находить prefix и postfix. То есть повторить sequences... |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 16, 2008 19:19 Post subject: |
|
|
_Johm wrote: | обрабатываются только первые три |
А почему не последний один? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 16, 2008 19:38 Post subject: |
|
|
Вахмурка wrote: | И даже попытался пошутить в ответ. |
Ну, извини
Просто я ждал нормального описания задачи, вот и не уловил юмора.
_Johm wrote: | a01
a02
a04
ab55 |
А если так: Code: | a5
a02
a04
a555
ab55
ab75
ac85 |
Как определить приставку и окончание? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Tue Dec 16, 2008 19:39 Post subject: |
|
|
Batya wrote: | _Johm писал(а):
обрабатываются только первые три
А почему не последний один? |
Аааа, потомучто, если бы надо было последний и далее, то выделять надо с другого места.
Это необходимо, чтобы расчеты были проще и с сильно отличающимися группами не началась лавинная генерация "пропущенных". |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Dec 16, 2008 19:41 Post subject: |
|
|
_Johm
Т.е. базовые части надо определять по первому элементу?
А количество цифр в числовых последовательностях всегда одинаковое? _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Tue Dec 16, 2008 19:50 Post subject: |
|
|
Batya wrote: | А если так:Код:
a5
a02
a04
a555
ab55
ab75
ac85 |
То, пусть и будет так: ничего не попадет в выходной файл, так как тук и так видно сколько всего, необходимость возникает, когда много однотипных файлов.
PS согласен, конечно, что задачу надо ставить исчерпывающе, но, Batya, любишь вытащить истину из "где-то рядом" поближе. |
|
Back to top |
|
|
_Johm
Joined: 14 May 2006 Posts: 119
|
(Separately) Posted: Tue Dec 16, 2008 19:59 Post subject: |
|
|
Batya wrote: | А количество цифр в числовых последовательностях всегда одинаковое? |
Вот тут не знаю. Может быть и разное.
a01
..
a99
a100
может быть и так
--------------------
следующее сообщение от Tol!k
решает проблему с некоректным
отображением русских букв в
окне cmd.exe
||
\/
Last edited by _Johm on Wed Dec 17, 2008 10:37; edited 1 time in total |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Tue Dec 16, 2008 22:46 Post subject: |
|
|
Я вас перебью (с)
_Johm wrote: | Bomm Quote: | ..они выводятся "крякозябликами", какую бы кодовую страеницу не выберешь | Такая же проблема. |
Какой шрифт у вас в ДОС-окне?
Если "Terminal", то в умолчаниях для cmd.exe смените шрифт на "Lucida Console".
В шрифте "Terminal" нет кодовой страницы 1251 |
|
Back to top |
|
|
Bomm
Joined: 15 Jan 2005 Posts: 245 Location: Москва
|
(Separately) Posted: Wed Dec 17, 2008 11:11 Post subject: |
|
|
Quote: | Какой шрифт у вас в ДОС-окне? |
Спасибо, дошло _________________ Юрий Бомштейн |
|
Back to top |
|
|
|