Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202

Скрипт для объединения двух словарей

26.10.2014, 12:39. Показов 8596. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужен скрипт для объединения двух словарей, точнее нужно перемешать два словаря со все возможными вариантами.
пример:

1.txt
A
B2
C
E1
2.txt
P
0
11
wwww
итог:
AP
A0
A11
Awwww
B2P
B20
B211
B2www
CP
C0
C11
Cwwww
E1P
E10
E111
E1wwww
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2014, 12:39
Ответы с готовыми решениями:

Программа для объединения двух виртуальных дисков
нужно склеить два виртуальных диска какая прога есть кроме акрониса

Перегрузить операцию + для объединения двух строк в одну
Всем привет! В общем, необходимо перегрузить оператор + для объединения двух строк в одну(Прата). Поиск в сети резальтат дал, НО проблема...

Написать программу для объединения двух произвольных векторов в один
Задание: написать программу для объединения двух произвольных векторов в один.

53
17.09.2015, 15:08
Студворк — интернет-сервис помощи студентам

Не по теме:

в качестве off-top, но в целях благородных идей просвещения
тёмных замордованных и замордоренных узников Уиндус сообщаю, что в соседнем лучезарном мире

эта суперпроблема решается так:

Bash
1
lam file1, file2, ... fileN

0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.09.2015, 19:16
ComSpec
Вот этот алгоритм
Windows Batch file
1
@powershell "0..(($x=gc '1.txt').Count-1)|%%{$x[$_]+(gc '2.txt')[$_]}|sc '3.txt'"
очень и очень медленный - из-за того что get-content каждый раз для считывания строки по индексу открывает файл, ищет строку, закрывает файл. И так каждую итерацию. На файлах в 140 тыс. строк я так (около часа) и не смог дождаться окончания операции. Памяти скушалось прилично - под 500 mb, но это еще ладно - до OutOfMemory (на файлах в миллион строк) пока еще далеко.
Для улучшения алгоритма лучше сразу считывать все файлы в массив строк и далее уже работать с ними.
Памяти, конечно, кушается не меньше, зато работает уже в диапазоне 1 минуты.
Windows Batch file
1
2
3
$file1=gc 'D:\dict\InsidePro_(Mini)_140_тысяч0.txt'
$file2=gc 'D:\dict\InsidePro_(Mini)_140_тысяч1.txt'
0..($file1.Count-1)|%{ $file1[$_]+$file2[$_]}| sc  'D:\dict\result.txt'
PS: Но на файлах с большим числом строк (ближе к миллиону) даже такой вариант уже не вариант. OutOfMemory. В C# с этим проще - там в память выводится по одной строке из файлов и никакого расхода.
--------------------------------------
volodin661,
Скорость обработки файлов какая у этой утилиты?
Для windows не нашел порта lam- пишут, что paste из cygwin ее аналог, но она строки не так клеит.
0
17.09.2015, 20:04

Не по теме:

Цитата Сообщение от Garry Galler Посмотреть сообщение
Скорость обработки файлов какая у этой утилиты?

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
time perl -E 'say "aaaaaaaaaa" for 1..3_000_000' > z1.txt
 
real    0m1.150s
user    0m0.296s
sys 0m0.034s
 
perl -E 'say "bbbbbbbbbb" for 1..3_000_000' > z2.txt
perl -E 'say "ccccccccccccc" for 1..3_000_000' > z3.txt
 
time lam z1.txt z2.txt z3.txt > z0.txt
 
real    0m9.126s
user    0m8.690s
sys 0m0.203s
 
ls -lh z*
 
-rw-r--r--  1 sten  staff    97M 17 сен 19:51 z0.txt
-rw-r--r--  1 sten  staff    31M 17 сен 19:48 z1.txt
-rw-r--r--  1 sten  staff    31M 17 сен 19:49 z2.txt
-rw-r--r--  1 sten  staff    40M 17 сен 19:49 z3.txt
чтобы не пилить SSD, измерял на USB-HDD ))

получается ~ 4 сек на запись и 5 сек на чтение/об'единение

0
17.09.2015, 21:56

Не по теме:

volodin661,
получается ~ 4 сек на запись и 5 сек на чтение/об'единение
Неплохо.
Но кто после этого скажет, что C# медленный?:)
C#
1
2
3
4
5
6
7
8
9
// генерация файлов словарей
string[] w = { "aaaaaaaaaa", "bbbbbbbbbb","ccccccccccccc"};
Parallel.For(0, 3,  i=> {File.WriteAllLines(@"test" + i + ".txt",Enumerable.Repeat(w[i],3000000));});
... основной код...
Вывод в лог:
17.09.2015 21:48:55
Time of generation of files: 00:00:01.4590835
Total time: 00:00:09.2225275
17.09.2015 21:49:04

0
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202
18.09.2015, 05:33  [ТС]
использую код от ComSpec:
Windows Batch file
1
@(for /f "usebackq delims=" %%i in ("1.txt") do @for /f "usebackq delims=" %%j in ("2.txt") do @echo %%i%%j)>"3.txt"
но он не поддерживает кириллицу. как исправить?

Добавлено через 1 час 55 минут
Garry Galler, при запуске вашего кода, происходит ошибка:
[удалено]

п.с. как изображение прикрепить в сообщение?
0
18.09.2015, 05:41
Cyber_F,
Как загружать вложения на форум
0
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202
18.09.2015, 05:53  [ТС]
ошибка:
Миниатюры
Скрипт для объединения двух словарей  
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
18.09.2015, 21:36
Cyber_F,
Замените название батника "Словари 1+2+3+4.bat" на что-нибудь стандартное: без спецсимволов (+) и, желательно, и без пробелов.

Добавлено через 37 минут
Хотя странно, у меня и с таким именем запускается. Покажите что вы изменили в батнике - имею ввиду как вы список файлов добавили в $fileList=@().

Добавлено через 10 часов 7 минут
Cyber_F,
Zip, ver. 1.0.0.0: (C) Garry Galler, 2015
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Параллельное слияние строк из набора файлов.
 
Объединяются все элементы первой последовательности с элементом, индекс которого
остается таким же во второй последовательности. Если последовательности имеют
не одинаковое число элементов, объединение происходит до тех пор, пока не будет
достигнут конец одной из них.
 
zip [/path:<каталог,маска файлов>] [/result:<результирующий файл>] [/sep:<разделитель>
zip /p:c:\test,*.txt  /объединение строк файлов .txt в указанном каталоге/
zip /p:,*.dic         /объединение строк файлов .dic в каталоге программы/
zip /s:-              /объединение строк со вставкой разделителя 'дефис'/
 
 /p[ath]:    Путь расположения файлов для объединения.
 /r[esult]:  Путь до результирующего файла.
             При указании только имени он будет создан в папке исходных файлов.
 /s[ep]:     Разделитель для объединяемых строк.
             По умолчанию - пустая строка.
 /stdout:[n] Вывод результата в консоль, а не в файл.
             Опция n включает нумерацию строк.
 /?          Справка по опциям командной строки.
 
Системные требования: NET. Framework не ниже 4.0.
0
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202
19.09.2015, 12:38  [ТС]
Garry Galler,
Windows Batch file
1
2
3
4
5
6
$fileList=@(
"1.txt",
"2.txt",
"3.txt",
"4.txt",
"zipdict.txt"
п.с. а код кириллицу поддерживает?
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
19.09.2015, 13:15
Cyber_F,
Поддерживает.Возможно с кодировкой файла батника что-то не так - powershell, например, не любит UTF-8 без BOM.
Попробуйте использовать скомпилированный вариант программы:Zip
(powershell здесь не требуется).
Я его доработал, поправив некоторые ошибки и добавил возможность указания списка из файла.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Zip, ver. 1.0.0.1: (C) Garry Galler, 2015
Параллельное слияние строк из набора файлов.
 
Объединяются все элементы первой последовательности с элементом, индекс которого
остается таким же во второй последовательности. Если последовательности имеют
не одинаковое число элементов, объединение происходит до тех пор, пока не будет
достигнут конец одной из них.
 
zip [/path:<каталог|путь до файла,маска файлов>] [/result:<результирующий файл>] [/sep:<разделитель>
zip /p:c:\test,*.txt  /файлы *.txt в указанном каталоге/
zip /p:1.txt,*.txt    /файлы *.txt начиная с файла 1.txt/
zip /p:,*.dic         /файлы *.dic в каталоге программы/
zip /p                /все файлы в каталоге программы/
zip /p /s:-           /объединение строк со вставкой разделителя 'дефис'/
zip /p:@list.ini      /файлы из списка  файлов в list.ini/
 
 /p[ath]:    Каталог расположения файлов для объединения. Если указать полный путь
             до файла - он будет считаться стартовым файлом для начала слияния.
             Иначе работает алфавитный порядок.
 /p[ath]:@   Путь до файла со списком файлов для слияния.
 /r[esult]:  Путь до результирующего файла.
             При указании только имени он будет создан в папке исходных файлов.
 /s[ep]:     Разделитель для объединяемых строк.
             По умолчанию - пустая строка.
 /stdout:[n] Вывод результата в консоль, а не в файл.
             Опция n включает нумерацию строк.
 /?          Справка по опциям командной строки.
 
Системные требования: NET. Framework не ниже 4.0.
 
 
История версий:
    19/09/2015
    ***  Выпущена первая версия программы: Zip v1.0.0.0.
 ---------------------------------------------------------------------------------------------  
    20/09/2015
    ***  Выпущена новая версия программы: Zip v1.0.0.1.
    * Исправлены ошибки определения путей 
    * Добавлена возможность указания стартового файла для начала слияния
    * Добавлена опция указания списка файлов
 -------------------------------------------------------------------------------------------
 Комментарий модератора 
Присоединяясь к авторитетному мнению volvo, убрал из темы спойлеры, в которых были коды. Прошу больше их не использовать для неоффтопных кодов, по крайней мере, в этой теме. Поверьте, сложно ориентироваться на страницах с массой спойлеров.
0
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202
20.09.2015, 13:41  [ТС]
Garry Galler, на win7/XP - при запуске открывается окно и сворачивается.
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
20.09.2015, 14:17
Cyber_F,
А вы как запускаете программу? Это же консольная программа - ее из cmd запускают, а не кликом.
0
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202
21.09.2015, 15:07  [ТС]
меню открывается, для запуска - какую команду нужно ввести?

Цитата Сообщение от Garry Galler Посмотреть сообщение
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Zip, ver. 1.0.0.1: (C) Garry Galler, 2015
Параллельное слияние строк из набора файлов.
Объединяются все элементы первой последовательности с элементом, индекс которого
остается таким же во второй последовательности. Если последовательности имеют
не одинаковое число элементов, объединение происходит до тех пор, пока не будет
достигнут конец одной из них.
zip [/path:<каталог|путь до файла,маска файлов>] [/result:<результирующий файл>] [/sep:<разделитель>
zip /p:c:\test,*.txt /файлы *.txt в указанном каталоге/
zip /p:1.txt,*.txt /файлы *.txt начиная с файла 1.txt/
zip /p:,*.dic /файлы *.dic в каталоге программы/
zip /p /все файлы в каталоге программы/
zip /p /s:- /объединение строк со вставкой разделителя 'дефис'/
zip /p:@list.ini /файлы из списка файлов в list.ini/
/p[ath]: Каталог расположения файлов для объединения. Если указать полный путь
 до файла - он будет считаться стартовым файлом для начала слияния.
 Иначе работает алфавитный порядок.
 /p[ath]:@ Путь до файла со списком файлов для слияния.
 /r[esult]: Путь до результирующего файла.
 При указании только имени он будет создан в папке исходных файлов.
 /s[ep]: Разделитель для объединяемых строк.
 По умолчанию - пустая строка.
 /stdout:[n] Вывод результата в консоль, а не в файл.
 Опция n включает нумерацию строк.
 /? Справка по опциям командной строки.
Системные требования: NET. Framework не ниже 4.0.
История версий:
 19/09/2015
 *** Выпущена первая версия программы: Zip v1.0.0.0.
 --------------------------------------------------------------------------------------------- 
 20/09/2015
 *** Выпущена новая версия программы: Zip v1.0.0.1.
 * Исправлены ошибки определения путей 
 * Добавлена возможность указания стартового файла для начала слияния
 * Добавлена опция указания списка файлов
 -------------------------------------------------------------------------------------------

Добавлено через 9 минут
через test - код запускается, но результат виден в окне cmd. а как сделать чтобы отдельный файл результат сохранялся?
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
21.09.2015, 16:13
Cyber_F,
В примерах же все написано.
Если использовать файл со списком файлов для объединения то:
Code
1
zip /p:@путь\список.ini  //расширение м.б. любое
если взять файлы из директории то:
Code
1
2
3
4
5
zip /p:диск:\папка,*.txt 
//будут взяты все файлы txt из этой папки, порядок обработки - алфавитный.
// если указать полное имя файла - он будет начальным для объединения, 
zip /p:диск:\папка\1.txt,*.txt 
//остальные файлы будут браться из его папки - согласно указанной маске.
если программа находится в той же папке то:
Code
1
zip /p:,*.txt   //будут взяты все файлы txt из папки программы
Отдельный файл результата и так будет сохранятся, если специально не указывать опцию /stdout.
Имя файла по умолчанию result.txt, будет создан в той же папке, где и сами файлы. Можно указать свое имя:
Code
1
zip /p:,*.txt /r:myresult.txt     //если не указывать полный путь, будет сохранен в папке исходных файлов
1
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202
24.09.2015, 09:29  [ТС]
Garry Galler, при обеднение: qwer + йцук, в результате: qwerСѓРє. а должно: qwerйцук.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
24.09.2015, 10:21
Cyber_F, Поставьте в систему AkelPad с заменой штатного блокнота - найдете в просторах ineta, и выставьте как в ...\....txt, так и в bat файле кодировку 866 и не будет подобных проблем.
0
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202
24.09.2015, 12:44  [ТС]
alpap, он и установлен. UTF - кодировка нужна была. спс.
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.09.2015, 16:37
Cyber_F,
Я так понимаю у вас исходные файлы в UTF-8?
Программа читает (и затем пишет) файлы в кодировке по умолчанию - то есть согласно локальным установкам. Для русскоязычной windows это 1251.
У себя никаких проблем с этим не обнаружил. Впрочем, добавил в программу возможность указывать кодировку ввода (для исходных файлов) и кодировку вывода (для записи).
То есть можно с такими опциями
Code
1
zip /p:,*.txt /cpin:866 /cpout:1251
прочитать файлы сохраненные в кодировке 866 и записать их в объединенный файл сразу в windows-1251, чтобы не было необходимости открывать результирующий файл в редакторе с кодировкой 866. Собственно, указывать 1251 в опции /cpout (да и саму опцию) не обязательно, так как она будет использоваться по умолчанию (на локализованной для русского языка windows).
Архив перезалил. Ссылка та же - в посте 28.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
24.09.2015, 17:52
Цитата Сообщение от Garry Galler Посмотреть сообщение
использоваться по умолчанию (на локализованной для русского языка windows)
- солидарен.
0
-6 / 3 / 0
Регистрация: 23.02.2014
Сообщений: 202
25.09.2015, 10:50  [ТС]
Garry Galler, - изначально в какой кодировке был рус. словарь - не в курсе.
спс, поробую. главное чтобы программа которая будит читать этот словарь его сфапкала.

команда zip /p:1.txt,2.txt - не запускается. ошибка: нельзя объединить данную последовательность!?
как запустить команду, чтобы можно было объединять словари вот в таком порядке: 1+2, 2+1, 3+1+2, 1+1 и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.09.2015, 10:50

Программа для объединения двух упорядоченных линейных массивов в один упорядоченный
Составьте программу с использованием процедуры для решения следующей задачи: Напишите программу с использованием процедуры для...

Определить предикат для объединения элементов двух списков, находящихся в диапазоне от N1 до N2
Друзья, здравствуйте! Подскажите пожалуйста, как решить поставленную задачу: &quot;Определить предикат для объединения элементов двух...

Разобрать LINQ запрос для объединения двух таблиц по правилу LEFT JOIN
Здравствуйте, уважаемые! Задача такова: Загрузил через адаптер данных в DataSet две взаимосвязанные таблицы. Первая sPersonality имеет...

Сравнение двух словарей
Помогите пожалуйста. Есть 2 словаря. В один даные вносятся сразу, а во второй при вводе в текстбокс. Нужно сравнить их, равны ли они. ...

Написать функцию для объединения содержимого двух двоичных файлов одного и того же типа в новом файле
Здравствуйте!Помогите,пожалуйста,написать код 2)Написать функцию concat_file(filenameA,filenameB,filenameAB),позволяющую объединить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru