Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

[POMOCY] Text Edit : jeśli wiersz +55 znaków ->ENTER


  • Zaloguj się, aby dodać odpowiedź
6 odpowiedzi w tym temacie

#1 jackolus

jackolus
  • 256 postów
  • SkądWarszawa

Napisano 14 lutego 2009 - 11:57

Uwielbiam automatora - jednak za chiny ludowe nie jestem w stanie wymyślić jednej czynności: problem występuje przy serialach TV w niskiej rozdzielczości. Przy konwertowaniu .txt na .srt PYM playerem - nie dopasowuje on długości wiersza do szerokości okna, stąd non stop dialogi są obcinane. Rozwiązaniem jest ręczne szukanie długich wierszy i "enterowanie" SRT Tool mówi, że "format unknown" - dlatego pozostał mi tylko PYM proszę o pomoc przy poniższej regule: [program Text Edit] jeżeli wiersz zawiera +55 znaków -----> ENTER Chyba jedynym wejściem jest Apple Script - ale że jestem zielony, sam sobie nie poradzę. dzięki serdeczne z góry

#2 jhartman

jhartman
  • 668 postów

Napisano 14 lutego 2009 - 14:07

Zapisz ten plik na dysk, np. na pulpit pod nazwą foldLines.awk:

!/-->/{
    max_len = 50

    print max_len;
    if(length($0) < max_len)
    {
        print $0;
    }
    else
    {
        print substr($0, 0, max_len);
        print substr($0, (max_len+1), 500);
    }
}

/-->/{
        print $0;
    }
Teraz z terminala wywołaj:

awk -f ~/Desktop/foldLines.awk >

Jeśli chcesz zawijać linię o innej długości zmień przypisanie max_len = 50

---- Dodano 14-02-2009 o godzinie 16:22 ----
Poprawiona wersja - nie obcina wyrazu w połowie:

!/-->/{
    max_len = 50

    if(length($0) < max_len)
    {
        print $0;
    }
    else
    {
        output = "";
    
        for(i=1; i<NF; i++)
        {
             if(length(output) > max_len)
            {
                print output;
                output = "";
            }
            output = output " " $i;
        }
        
        print output;
    }
}

/-->/{
        print $0;
    }



#3 jackolus

jackolus
  • 256 postów
  • SkądWarszawa

Napisano 16 lutego 2009 - 00:17

Skrypt działa - dzięki serdeczne, jestem zobowiązany :) ale jeszcze jedno pytanie: jak ustawić wartość zmiennej pliku wejściowego, tzn. w teorii: 1) wybieram rzecz np. z okna findera 2) pobierana jest ścieżka do wybranego pliku i podstawiana w miejsce X.srt pliku wejściowego 3) automatycznie plik jest nadpisywany i tak odjąłeś mi kilkanaście minut pracy - ale wiadomo, człowiek chce więcej i dlatego trochę uciążliwym jest za każdym razem wklepywanie polecenia do terminala dla kolejnego pliku o specyficznej nazwie. czyli w zasadzie jak powiedzieć Automatorowi, żeby: a) Prośba o rzeczy Findera B) pobierz ścieżkę pliku c) zamień ścieżkę na nową zmienną (ARG1) d) uruchom skrypt powłoki awk -f ~/Desktop/foldLines.awk {ARG1} > {ARG1} wklejając tą samą ścieżkę w wejście i wyjście chyba nie powinien się pytać o nadpisanie (?)

#4 jhartman

jhartman
  • 668 postów

Napisano 16 lutego 2009 - 09:13

Nie testowane, ale to powinno wyglądać jakoś tak:

Dołączona grafika


(możesz zaznaczyć więcej niż jeden plik i przerobić je masowo)

#5 jackolus

jackolus
  • 256 postów
  • SkądWarszawa

Napisano 16 lutego 2009 - 15:17

Automator działa jak marzenie - dzięki wielkie :)

natomiast dopiero teraz zauważyłem, że skrypt awk robi ciekawostkę:

- przenosi czasem bardzo długie zdania prawidłowo ale ZAWSZE ucina ostatnie słowo z kropką na końcu.

dla porównania: (Unicode, stąd te znaczki)
przed:

Nie. Mam dla ciebie coŇõ co pomoŇľe ci wygrańá jutrzejszy konkurs literowania.

po:

Nie. Mam dla ciebie coŇõ co pomoŇľe ci wygrańá jutrzejszy
konkurs

#6 jhartman

jhartman
  • 668 postów

Napisano 16 lutego 2009 - 15:20

Spróbuj podmienić

for(i=1; i<NF; i++)

na
for(i=1; i<(NF+1); i++)


#7 jackolus

jackolus
  • 256 postów
  • SkądWarszawa

Napisano 16 lutego 2009 - 17:02

prędkość odpisywania masz niesamowitą, kompetencje również :) wszystko działa - co prawda przy enterowanym zdaniu daje dwie spacje na początku każdej linijki ale w niczym to nie przeszkadza, więc wszystko jest w pełni funkcjonalne dzięki ogromne




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych