Как сохранить нужную строку - ссылку

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

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

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

Сообщение Flasher »

Я просто не могу понять, откуда взялась цифра 4? ПОчему не 1?

И что мы должны отбирать, уникальные номера или уникальные ссылки (строки)? Советую с этим конкретно определиться.
astrolit
Сообщения: 42
Зарегистрирован: Чт июл 26, 2012 05:49

Сообщение astrolit »

по первому 4 потому, что я использую на форме только четыре окна для вывода картинок поэтому если 2 или 3 это гуд а вот более 4 лишнее

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

Сообщение Flasher »

Ещё раз:
Flasher писал(а):ПОчему не 1?
Спрашиваю потому, что у меня есть уже готовый каркас для фильтра в похожем скрипте, только по замене, а не собиранию всего в один файл.

2) Это точно не проще, чем сравнивать по всей строке. :)
astrolit
Сообщения: 42
Зарегистрирован: Чт июл 26, 2012 05:49

Сообщение astrolit »

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

Сообщение Flasher »

astrolit
Я предлагаю методику реализации тут не обсуждать, с этим я сам разберусь. Вырезать там ничего не надо. Для этого коллекция с фильтром создаётся.
Что значит "и так 4 раза"? Может, совпадений больше, чем 4.
Если останется одна (не 2, не 3, не 4) уникальная ссылка, это подходит? Я правильно понял?
astrolit
Сообщения: 42
Зарегистрирован: Чт июл 26, 2012 05:49

Сообщение astrolit »

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

Сообщение Flasher »

astrolit писал(а):но не хотелось бы потерять другие, если более одной сылки
В каком смысле потерять? Мы же строку целиком проверяем. Зачем иметь более одной аналогичной строки?
Под уникальностью всегда понимался один единственный экземпляр, иначе это уже никакая не уникальность.

И ещё важный момент:
photos/83/999/87947/821709_740x550.jpg
photos/83/999/87947/821708_740x550.jpg

photos/83/15/88868/829347_740x550.jpg
photos/83/15/88868/829346_740x550.jpg
photos/83/15/88868/829345_740x550.jpg
photos/83/15/88868/829344_740x550.jpg
photos/83/15/88868/829343_740x550.jpg
Эти строки очевидно - разные.
Нужно как-то конкретней описывать условие..
astrolit
Сообщения: 42
Зарегистрирован: Чт июл 26, 2012 05:49

Сообщение astrolit »

я же приводил пример,

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

photos/83/15/88868/829347_740x550.jpg
photos/83/15/88868/829346_740x550.jpg
photos/83/15/88868/829345_740x550.jpg
photos/83/15/88868/829344_740x550.jpg
photos/83/15/88868/829343_740x550.jpg
              ^
              |
      идентификационный номер
на каждый идентификационный номер приходится от 2 до 150 ссылок на фотографии. мне же надо не более 4 фото, скажем номер это номер гостиницы и на конкретную гостиницу нужно не более 4 ссылок сохранить

Добавлено спустя 3 минуты:
Flasher писал(а):
И ещё важный момент:
photos/83/999/87947/821709_740x550.jpg
photos/83/999/87947/821708_740x550.jpg

photos/83/15/88868/829347_740x550.jpg
photos/83/15/88868/829346_740x550.jpg
photos/83/15/88868/829345_740x550.jpg
photos/83/15/88868/829344_740x550.jpg
photos/83/15/88868/829343_740x550.jpg
Эти строки очевидно - разные.
разные но имеют один уникальный номер 88868 и с его упоминанием нужно оставить не более 4 строк, и так перебрать все строки для номеров именно в этой колонке от 00000 до 88868
Последний раз редактировалось astrolit Вс авг 05, 2012 16:31, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

astrolit писал(а):я же приводил пример
А я спросил
Flasher писал(а):И что мы должны отбирать, уникальные номера или уникальные ссылки (строки)? Советую с этим конкретно определиться.
на что последовал ответ
astrolit писал(а):отбирать надо уникальные ссылки -строки!
Так что я тут умываю руки..

В общем, править результирующий файл я не буду, это задача к ТС не относится. А исходную задачу топика с учётом отбора до 4-х строк по идентификатору реализую чуть позже.
astrolit
Сообщения: 42
Зарегистрирован: Чт июл 26, 2012 05:49

Сообщение astrolit »

ок спасибо, я в свою очередь попробую vb.net
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

astrolit
Гм.. Я пытался разобраться с исходной задачей по html-файлам, но сейчас вижу, что там нужно выполнить ещё какие-то условия. Боюсь ошибиться в раскопках. Можно тут попунктно расписать всю задачу с выделением цветом отсекаемых строк и соотв. расположением идентификатора, чтобы я понимал, что оставлять, где искать и т.д.?
astrolit писал(а):в свою очередь попробую vb.net
vb.net куда функциональней vbs. Если есть успехи в этой области, так, может, и мне не стоит напрягаться? :wink:
astrolit
Сообщения: 42
Зарегистрирован: Чт июл 26, 2012 05:49

Сообщение astrolit »

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

photos/83/999/87947/821713_740x550.jpg
photos/83/999/87947/821712_740x550.jpg
photos/83/999/87947/821711_740x550.jpg
photos/83/999/87947/821710_740x550.jpg
photos/83/999/87947/821709_740x550.jpg
photos/83/999/87947/821708_740x550.jpg
photos/83/15/88868/829347_740x550.jpg
photos/83/15/88868/829346_740x550.jpg
photos/83/15/88868/829345_740x550.jpg
photos/83/15/88868/829344_740x550.jpg
а хотелось бы так

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

* photos/83/999/87947/821713_740x550.jpg
* photos/83/999/87947/821712_740x550.jpg
* photos/83/999/87947/821711_740x550.jpg
* photos/83/999/87947/821710_740x550.jpg
photos/83/999/87947/821709_740x550.jpg
photos/83/999/87947/821708_740x550.jpg
* photos/83/15/88868/829347_740x550.jpg
* photos/83/15/88868/829346_740x550.jpg
* photos/83/15/88868/829345_740x550.jpg
* photos/83/15/88868/829344_740x550.jpg
в даном случае звезда маркер, в последствии строки без маркера надо удалить.
да и ещё как правило похожие идут последовательно может как то метить строки вроде первые четыре пометили и переходим к следующей не похожей строке сразу метим её и три последующих и повторяем до конца документа
astrolit
Сообщения: 42
Зарегистрирован: Чт июл 26, 2012 05:49

Сообщение astrolit »

ну как говорится сказал сделал,
сработало как нельзя лучше, я так накрутил, что сначала вышел говн :oops: код ! Но постепенно всё стало так как было нужно

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

    Imports System.IO
    Imports System.Text
    Imports System.Text.RegularExpressions

    Public Class Form1
       

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          
            Dim dict As New Dictionary(Of String, Integer)
            Dim cnt As Integer
            Dim s As String
            Dim o As New System.IO.StreamReader("C:\download\silkfoto.txt")
            Dim key As String
            s = o.ReadLine() 'первое значение для кей
            For i As Integer = 0 To 50 'тут пробегаемся только по первым 50 строчкам
    5:          s = o.ReadLine()' здесь подбрасываем новое значение для кей
                key = Regex.Match(s, "(photos/\d+/\d+/\d+/)", RegexOptions.IgnoreCase).Value
                For k As Integer = 1 To 4
                    'Для каждой строки, key - та часть, по которой нужно сравнивать строки:
                    If dict.ContainsKey(key) Then cnt = dict.Item(key) + 1 Else cnt = 1
                    dict.Item(key) = cnt

                    If cnt < 5 Then 'тут выдает нужные четыре значения
                  text = o.ReadLine()'маркируем строку
                    'a.WriteLine(text)
                    End If
                Next
            Next
            o.Close()
a.Dispose() : a.Close()
        End Sub
    End Class
да, на форму бросаем кнопку
Ответить