Построчное слияние текстовых файлов

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Ответить
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Построчное слияние текстовых файлов

Сообщение shveicar »

Здравствуйте. Существует необходимость объединения нескольких (более двух) текстовых файлов с ссылками (в них присутствуют знаки вида ?,&,#,/,=). Необходимо произвести слияние текстовых файлов в один, - но не так, как это делает texpipe (поочередное добавление всех ссылок из каждого файла), а так, чтобы каждая строчка из каждого текстового файла бралась поочередно. пример:
1.txt-

Код: Выделить всё

http://forum.wincmd.ru/
http://forum.wincmd.ru/viewforum.php?f=3
2.txt -

Код: Выделить всё

http://www.mail.ru/
http://www.hpc.ru/
3.txt -

Код: Выделить всё

http://www.hpc.ru/news/
http://www.hpc.ru/MacC/contacts/#buy
в результате должно получиться:- sliv.txt

Код: Выделить всё

http://forum.wincmd.ru/
http://www.mail.ru/
http://www.hpc.ru/news/
http://forum.wincmd.ru/viewforum.php?f=3
http://www.hpc.ru/
http://www.hpc.ru/MacC/contacts/#buy
Заранее благодарен за помощь.

Добавлено спустя 21 минуту:

Допустим, файлы будут выделяются в текущей панели, - а на противоположной появляется один общий файл. Спасибо Flasher.
"Пока Чубайсы у руля науки: - Мы будем долго пачкать нано-брюки"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

А число строк в каждом файле всегда идентично?
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Число строк в каждом из текстовых файлов разное, и может каждый раз меняться(имеется ввиду- для каждого конкретного задания может быть разное количество строк) . (по идеи, если строки в каком-либо файле заканчиваются, скрипт должен продолжить сортировку- слияние из следующих выделенных файлов)
"Пока Чубайсы у руля науки: - Мы будем долго пачкать нано-брюки"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar писал(а):имеется ввиду- для каждого конкретного задания может быть разное количество строк
Разное кол-во строк в каждом из файлов? Я тогда не понимаю смысл такого извращения. Ну, останутся куски при достижении минимума, и как предлагается их отсортировывать, в соотвествии с чем?
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher писал(а):Ну, останутся куски при достижении минимума, и как предлагается их отсортировывать, в соотвествии с чем?
- когда останется всего один файл, то строки из него, могут быть добавлены без сортировки, их всегда можно отделить и впоследствии повторно пересортировать.
Я тогда не понимаю смысл такого извращения
Смысл такого действия прост, существует на некоторых сайтах система защиты, которая не позволяет выкачивать контент, -если алгоритм закачки не соответствует определенной логике. Изменив последовательность ссылок,- возможно автоматизировать данный процесс. Спасибо. Надеюсь на понимание.
"Пока Чубайсы у руля науки: - Мы будем долго пачкать нано-брюки"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar писал(а):- когда останется всего один файл, то строки из него, могут быть добавлены без сортировки, их всегда можно отделить и впоследствии повторно пересортировать.
При чём тут один файл? Я пишу про разное число строк в выбранных файлах. Можно сопоставлять строки, когда их одинаковое число.
shveicar писал(а):существует на некоторых сайтах система защиты, которая не позволяет выкачивать контент...
Не понял, как это относится к оставшимся текстовым кускам? И не очень понял, зачем нужны эти файлы? Почему нельзя просто формировать списки нескачиваемых файлов на автомате?
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher писал(а):Можно сопоставлять строки, когда их одинаковое число
Хорошо, пусть во всех объединяемых файлах- будет одинаковое число строк, если это упрощает задачу... (с помощью textpipe можно произвести предварительное выравнивание).
Не понял, как это относится к оставшимся текстовым кускам? И не очень понял, зачем нужны эти файлы? Почему нельзя просто формировать списки нескачиваемых файлов на автомате?
В том то и дело что не все так просто, некоторые адреса отсеянyые после закачки offline explorerom (он их почемуто не берет, так как используется переадресация (типа &path=/) с проверкой через safebrowsing-cache.google.com объединяются с другими адресами (имитирующими загрузку html браузером) и после объединения передаются в scrapbook в firefoxe. Просто, в ручную перемешивать ссылки (особенно если их много) - одуреть можно. Да и для более сложных случаев при формировании списка для iMacros такой вариант очень - бы пригодился.
"Пока Чубайсы у руля науки: - Мы будем долго пачкать нано-брюки"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Короче, мой мозг ничего не понимает...
Сделал для файлов с разным числом строк.

Код: Выделить всё

' Построчное склеивание текстовых файлов
' Параметры: <список файлов> <путь к файлу-получателю>
' Пример: %L "%TСписок_отсортированных_ссылок.txt"
'======================================================
With CreateObject("Scripting.FileSystemObject")
  Set TF = .OpenTextFile(WScript.Arguments(0), 1)
  On Error Resume Next
  For Each M in Split(TF.ReadAll, vbNewLine)
    A = Ubound(Split(.OpenTextFile(M).ReadAll, vbNewLine))
    If Max < A Then Max = A
  Next    
  TF.Close
  n = 0
  Set List = .OpenTextFile(WScript.Arguments(1), 8, True)
  Do While n <= Max
    Set TF = .OpenTextFile(WScript.Arguments(0), 1)
    Do While Not TF.AtEndOfStream
      F = TF.ReadLine
      If F > vbNullString Then
        If .FileExists(F) Then
          L = Split(.OpenTextFile(F).ReadAll, vbNewLine)
          If Trim(L(n)) <> "" Then List.WriteLine L(n)
        End If
      End If
    Loop
    TF.Close
    n = n + 1
  Loop
  List.Close
End With
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Замечаньице:
не "отсортированных", а перетасованных
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Да это всего лишь пример названия файла. Хоть "дедяпетясъелмедведя.txt". :lol:
И, кстати, сортировать можно по разным критериям. Возьми те же колонки контентных плагинов.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Большое Спасибо - Flasher
Как всегда выручаешь, жаль что сначала вроде-бы простое действие, показалось таким сложным... Ну, списываю на Моё "запутанное" объяснение... :) Вобщем, то - что нужно, Респект!
P.s
Flasher писал(а):И, кстати, сортировать можно по разным критериям
это Вы об этой строчке? n = n + 1
"Пока Чубайсы у руля науки: - Мы будем долго пачкать нано-брюки"
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Пожалуйста. :)
shveicar писал(а):жаль что сначала вроде-бы простое действие, показалось таким сложным...
Чтобы судить о простоте действия, надо бы самому соображать в скриптинге. Не так ли? :wink:
shveicar писал(а):это Вы об этой строчке? n = n + 1
Это всего лишь счётчик. Я про название файла и способ сортировки, который может быть каким угодно. В данном случае: файл + номер строки.
Ответить