Język na miarę opisanych możliwości i potrzeb

0

Coraz częściej wykonuję zamiany określonych wyrażeń regularnych i różnych transformacji tekstu. Robię to, gdy potrzebuję krok po kroku edytorem, ale myślę, że nastał czas, gdy wypadałoby nauczyć się jakiegoś względnie łatwego języka programowania i móc ustawić kilkanaście operacji zamiany naraz, zwłaszcza, że transformacje, które robię są zwykle identyczne.

Samo programowanie zawodowo nie jest mi potrzebne, ale jako amator chętnie uprościłbym sobie to czy owo. Na naukę języka czasu w zasadzie nie mam (tak, żeby np. poświęcić bite parę miesięcy), więc byłaby ona realizowana „z doskoku” w wolnej chwili. Uczyłbym się tych aspektów, co do których miałbym pomysł na ich praktyczne wykorzystanie w automatyzacji codziennych pecetowych czynności.

Przykładowym zadaniem, które chciałbym zaprogramować wyglądałoby tak: [ w plik.txt znajdź nawiasy i wszystko, co jest w tym pliku w nawiasach wraz z nimi zapisz w nowym pliku, który utworzysz i nazwiesz nawiasy.txt Natomiast, to co jest poza nawiasami zapisz w postaci nowo utworzonego pliku o nazwie poza_nawiasami.txt Następnie w pliku nawiasy.txt zamień każde słowo „drzwi” na słowo wrota, a w każdym słowie zaczynającym się na „a” zamień pierwszą literę na „A”, a każde słowo zaczynające się na „c” zamień na słowo „ciupaga”, każde słowo na „d:” zamień na aktualną datę, a potem policz czy liczba liter „g” w pliku, jest równa liczbie liter „h” i jeśli nie jest, to zapisz tę informację w pliku o nazwie log.txt. W pliku poza_nawiasami.txt wykonaj także 10 różnych zdefiniowanych zamian z wykorzystaniem regexu, a gdy to wszystko zrobisz wyświetl komunikat: „udało się”]

W związku z tym, że jestem amatorem, wydaje mi się nie potrzebuję jakichś trudnych, profesjonalnych języków w stylu C, C++ czy Java. Z tego, co sam czytałem w zwrotach z wyszukiwarki, wartym zainteresowania wydał mi się Python, ale gdy przeczytałem, że akurat jest zmiana z wersji 2 na 3 i do wyboru jest nauka na czymś, co parę lat będzie nieaktualne, albo nauka czegoś, co na razie nie ma bibliotek (w tym py2exe), jest nowe i niekompatybilne z poprzednim. Zapewne też, jeśli popełnię błąd to na forum znajdą mi go prędzej w wersji 2, bo w niej siedzą z oczywistej przyczyny długoletni wyjadacze. Podobnie literatura (w tym ceniona książka na wikibooks: Zanurkuj w Pythonie) jest o wersji 2. Dodatkowo przeczytałem, że trzeba operować w Windows w konsoli … Ja bym wolał pliki uruchamiane 2 klikiem, jak np. .ahk, w którym napisałem parę prostych skryptów. Wadą .ahk jest to, że nie wspiera UTF 8, ani 64 bitów. Są co prawda forki, na forum, ale nie wiadomo ile ludziom je tworzącym starczy zapału i czy będą potem kompatybilne, gdyby wyszła nowa wersja Autohotkeya. Minusem AHK jest też brak polskiego forum i polskiej dokumentacji. Niby rozumiem angielski, ale po polsku komunikacja jest swobodniejsza i szybsza. Poza tym możliwości .ahk choć na razie by mi wystarczyły, nie wydają się bardzo perspektywiczne, gdybym potrzebował, czegoś o czym na razie jeszcze nie myślę. Wszystko ma plusy i minusy. Postanowiłem opisać swoje potrzeby i możliwości zapytać o radę bardziej doświadczonych.

Jeśli ktoś ma doświadczenie, to proszę o rekomendację i przyznanie polecanemu przez siebie językowi od 1 do 4 punktów w następujących kategoriach:

Łatwość

Dostępność materiałów dla początkującego nie tylko w danym języku, ale ogólnie w programowaniu

Wsparcie i wyrozumiałość społeczności

Możliwości

Do tego poproszę o główną wadę rekomendowanego języka.

Dzięki za przeczytanie postu :-)

0

C# ma sporo fajnych metod do pracy ze strumieniami i ciągami znaków.

0

Jeśli chcesz przede wszystkim zajmować się transformacjami tekstu to poznaj perl'a. Do super łatwych on nie należy i ma pewne swoje "dziwadełka", ale jest bardzo dużo materiałów zarówno w postaci papierowej jak i elektronicznej, duża społeczność, która pomaga gdy popadniesz w tarapaty oraz najlepsze wsparcie dla transformacji tekstu jakie istnieje.

Wadą perla jest jego pogmatwanie. Czasami nie wiadomo jak coś działa, bo jest napisane na skróty i pozostaje nam się domyślać co autor ma na myśli. Z drugiej strony język ma bardzo duże możliwości jeśli chodzi o pracę z tekstem czy bardziej ogólnie z danymi.

Można nauczyć się go "z doskoku" poświęcając kilka wieczorów na podstawy, a następnie tylko uzupełniając wiedzę o potrzebne elementy. Oczywiście jeżeli będziesz chciał poszpanować kodem, który wygląda jakby kot przeszedł przez klawiaturę to też perl ci to umożliwi (uwaga! kota musisz sam nabyć).

No i najważniejsze, musisz nauczyć się wyrażeń regularnych. Wtedy praca z tekstem nie będzie stwarzała problemów.

0

Podobnie jak Koziokek - perl jest do tego niezly. Obczaj moze jakiegos Pythona?
Byle nie nic co nie jest skryptowe, jak wyzej wspomniany C# - nie widze sensu.

0

Ja bym za perla podziękował, nie mam kota żeby nim o klawiaturę rzucać:

&}Ak'>v=4%Qe}9;

0

Ja bym jednak proponował zastanowić się nad Pythonem ;)

0

Python albo Ruby, ten drugi to skrzyżowanie Lispu, Smalltalka, Pythona i teksańskiej masakry kotem na klawiaturze...

0

A skrypty emacs'owe ? W sumie sie tym nie bawilem, ale slyszalem, ze mozna tam mnostwo rzeczy zrobic. No i jakby nie patrzec (pomijajac rozbudowanie emacs'a) jest to edytor tekstu ;p

0

Emacs to VM Lispu ukierunkowane na tworzenie edytora. Regexy są wkurzające, poza tym trzeba naprawdę lubić krągłości. Nigdy nie próbowałem wykorzystywać Emacs-a jako host skryptów do przetwarzania dokumentów, chociażby dlatego, że odpalać to się ten edytor odpala powoli.

0

Taki język musiałby być bardzo prosty na początku, inaczej nie opłaca się uczyć „jakiegoś” Perla do tego celu: co mi po tym, że będę umiał przerobić plik w 30 sekund — ale po 6 godzinach nauki, jak mogę już teraz go otworzyć w edytorze z obsługą regexów i po kilku fazach zamiany mieć rezultat, albo w parę minut napisać program w jakimś kompilowanym języku.

Do tych zadań używam odpowiednio EditPlus i Free Pascala.

Przydałby się edytor tekstowy ze zintegrowanym językiem opartym o wyrażenia regularne, ale o większych możliwościach, i kompletnym w sensie Turinga.
I błagam, nie Emacs.

0

@Azarien takie rzeczy to tylko w erze. Pytanie ile uczyłeś się Pascala by teraz pisać takie programy w kilka minut? No na pewno więcej niż te 6 godzin. Początki są zawsze trudne i nie powinno się ich mierzyć w ten sposób.
Do obróbki tekstu można by jeszcze użyć sed lub awk + skrypty powłoki. Dla masochistów ex.

0

Do obróbki tekstu można by jeszcze użyć sed lub awk + skrypty powłoki

Miodzio... a nauka jakieś 30 min. dla podstawowych potrzeb ^^

0

Mam doświadczenie w tworzeniu tego typu narzędzi w C++ i Perlu. Uważam, że oba te języki znakomicie nadają się do tego typu zastosowań. Mając wiedzę i wprawę takie narzędzie tworzy się dosłownie w 5 minut. Nieco prostszy i szybszy do nauczenia będzie Perl. W C++ żeby skorzystać z dobrodziejstw wyrażeń regularnych trzeba już niestety korzystać z zewnętrznych bibliotek np. Boost lub PCRE, ew. własnej.

0

Z dalszego googlowania i lektury wątku doszedłem do wniosku, że powinienem skoncentrować się na języku skryptowym, a jeśli chcę liczyć na wsparcie, to z języków skryptowych zawęzić wybór do tych, które są popularne i mają społeczności czyli: Perl, Python, Ruby.

Z tego, co dotychczas wygooglowałem :

Perl:

  • uważany jest za język niemal "dedykowany" do obróbki tekstu, czyli tego, co jest moją pierwszą potrzebą obecnie
  • jest o nim sporo materiałów
  • ma społeczność
  • jest zagmatwany
  • ludzie, którzy podają, że znają jednocześnie Perla i Rubiego lub Pythona raczej polecają te ostatnie (aczkolwiek nie ma mowy o rodzaju zastosowań)
  • podobno perl ma mniejsze możliwości niż 2 pozostałe
  • w Wikipedii napisali: cechą specyficzną Perla jest wykorzystywanie znaków przedrostkowych (jak zresztą wszystkich znaków) w różnych znaczeniach zależnie od kontekstu - a ja zdecydowanie wolałbym, żeby jedno polecenie miało jedno znaczenie.

? czy w perlu mogę też programy okienkowe z rozszerzeniem .exe gdyby kiedyś było mi to potrzebne?

Python:

  • podobno prostszy
  • podobno większe możliwości
  • okres pomiędzy przejściem z wersji na wersję (to wydaje mi się w ogóle idiotyczne, bo Python 2 i 3 nie są ze sobą w pełni kompatybilne. Na mój ogląd laika, to tak jakby Microsoft wydał MS Office 2010, które nie obsługuje dokumentów napisanych w MS Office 2007 i na pocieszenie oznajmił, że będzie wspierał wersję 2007 jeszcze ok. 3 lata, a potem gdy wsparcie się zakończy, to stare dokumenty będzie trzeba przepisać lub uruchamiać pod czymś niewspieranym... Na mój rozum, jeśli zrobili coś takiego raz, to mogą zrobić i po raz drugi. Wydadzą wersję 4 za parę lat bez wstecznej zgodności i co? będę przepisywał kod? Bez sensu. Ja nie kumam po co usuwać z języka coś co w nim jest i lepiej lub gorzej działa. Jeśli chce się dodać nowe możliwości, to przecież można dodać nowe rzeczy nie usuwając starych. Kto będzie chciał, ten wybierze nowe metody, polecenia itp., a starych i niezalecanych używał nie będzie, ale mogą sobie być w języku, skoro jeść nie chcą ... Być może moje myślenie wynika z jakiegoś nieporozumienia, ale chciałbym wiedzieć, czy Perl lub Ruby w czasie swojego rozwoju też wydawały wersje niekompatybilne z poprzednimi? Czy Perl 6 będzie kompatybilny z obecnym?)

Z drugiej strony pomyślałem też o tym, że może do wyrażeń regularnych nie potrzebna jest żadna biblioteka, która czeka na przeportowanie do wersji 3, a zanim się języka poduczę do bardziej skomplikowanych rzeczy, to i biblioteki przeportują. Idąc za tą myślą ruszyłem przeczytać próbny rozdział z jedynej chyba dostępnej po polsku książki o Pythonie 3:

http://helion.pl/ksiazki/python_3_kompletne_wprowadzenie_do_programowania_wydanie_ii_mark_summerfield,pytho3.htm

Ściągnąłem też pythona: http://www.python.org/ftp/python/3.1.2/python-3.1.2.msi

i zainstalowałem w C:\Python31

Zgodnie z radami z książki stworzyłem katalog o nazwie C:\py3eg plik, a w nim utworzyłem plik tekstowy, zmieniłem mu rozszerzenie na .py i nadałem nazwę hello.py

W tymże pliku wpisałem

#!/usr/bin/env python3
print("Witaj", "Świecie!")

Następnie zgodnie z zaleceniem z książki:

Uruchom konsolę, następnie w systemie Windows wprowadź poniższe polecenia
(przyjmujemy założenie, że Python został zainstalowany w lokalizacji domyślnej). Dane
wyjściowe konsoli są przedstawione czcionką o stałej szerokości, natomiast wprowadzane
polecenia zostały pogrubione:

C:>cd c:\py3eg
C:\py3eg>c:\python31\python.exe hello.py

Wpisałem więc w wierszu poleceń:

cd c:\py3eg

i nacisnąłem enter

następnie wpisałem

c:\python31\python.exe hello.py

i też wcisnąłem enter, a po "Hello worldzie" ani widu ani słychu ...

user image


O Rubim wiele nie wygooglowałem. Wydaje mi się, że do moich obecnych potrzeb by się nadał, ale jego głównym przeznaczeniem jest sieć, bo wpisujesz w wyszukiwarce Ruby i otrzymujesz Ruby on rails. Większa część większości stron o rubim dotyczy jego zastosowań sieciowych.

Sed i awk sprawiają dobre wrażenie jeśli, chodzi o moje obecne główne zapotrzebowanie, ale wydaje mi się, że ich zastosowanie jest raczej zawężone do właśnie takich rzeczy. Pytając o język miałem ambicję zamiast uczyć się języka o dość wąskim przeznaczeniu, nauczyć się wąskiego kawałka języka o szerszym przeznaczeniu i gdy wynikną jakieś nowe potrzeby lub pomysły, to dalej hobbystycznie go zgłębiać, bo uczucie, że coś zrobiło się samemu i to działa, jest bardzo fajne. Wiem to po moich trywialnych skryptach .ahk. Kij z tym, że nauka trwała kilka godzin lub dni, a serię kilkunastu zmian notatnikiem można zrobić w minutę, bo tę minutę trzeba by pomnożyć przez 2-3 razy w tygodniu razy liczba tygodni. Poza tym można się pomylić, co do kolejności konwersji. Generalnie rutyna mnie irytuje a programowanie pociąga - ze względu na aspekt tworzenia, kombinowania i ogólnie ruszania mózgownicą ;) No i to jest też wyzwanie, z którego na razie nie zrezygnowałem. Jak się doszczętnie zniechęcę do opisanej powyżej trójki języków o szerszym zastosowaniu, to wybiorę rozwiązanie minimalistyczne, czyli właśnie sed lub awk i powiem sobie: zrób czego potrzebujesz, a resztę olej, bo są kłopoty pewnikiem, a korzyści niewiadomą ;-) Ale to jeszcze nie ten etap ;-).

Jeszcze 1 kwestia: czy w Perlu, Pythonie lub Rubim mógłbym napisać rozszerzenie do jakiegoś używanego przeze mnie programu pisanego w jakimś innym języku? Jeśli tak, to czy musiałbym znać też ten język, w którym napisany jest program główny, żeby wiedzieć, gdzie co dopisać czy podpiąć? (zakładam, że udało mi się uzyskać kod tego programu)

0

Zanim zrobisz cd c:\py3eg, to wklep jeszcze c: i ENTER

0

Czemu uruchamiasz skrypty pythona z konsoli? Tak jest bardziej haxxorsko, ale na windowsie możesz po prostu dwakliknąć ikonkę skryptu i on się uruchomi... (no i gdzie przekierowujesz komunikaty błędu konsoli że ci się nie pojawiają na ekranie)

Przejście python 2/3 - imo to nie jest takie straszne - ze zmianami spokojnie sobie radzi prosty skrypt 2to3 (jest też 3to2). No i te wszystkie zmiany zrywające kompatybilność wstecz wzbudziły niezgodę części społeczności pythona, więc na replay raczej nie ma co liczyć.

To który język wybrać - to zależy. Czy planujesz dalej programować coraz to inne rzeczy czy wystarczy ci zamiana tekstu. Jeśli to drugie - nie pisałem w nim ale Perl powinien być ok. Jeśli to pierwsze to raczej python (co do kwestii o której wspominasz pod koniec - C dobrze się integruje z pythonem), ale możesz też wybrać jakiś pełnoprawny język kompilowany jak C#, Java albo C++.

0

Ja rozumiem ze niektórzy lubują się w pisaniu za pomocą konsoli, ale może lepiej zainstalować jakieś IDE? Np. Spyder do Pythona?
Co rozumiesz przez "rozszerzenie" do programu? Chciałbyś dodać jakąś funkcjonalność albo coś takiego? Zapomnij ;] Jeśli będziesz miał źródła i znał język w którym to ktoś napisał to może jeszcze, ale w innym wypadku odpada.

0

No i poszło. Dzięki. Z drugiej strony książka powinna uwzględnić, że Windows nie umie przejść bezpośrednio do katalogu i uprzedzić o tym, bo skąd klikacz ma to wiedzieć ;)

user image

Czy do wyrażeń regularnych będę potrzebował bibliotek?

I zależy mi na informacji, czy braki kompatybilności wstecznej pomiędzy wersjami danego języka, to wyjątek czy chleb powszedni?

0
Bakcyl napisał(a)

Windows nie umie przejść bezpośrednio do katalogu

Umie, zaś cmd.exe, na wzór command.com z DOS-a, pamięta oddzielnie ścieżki dla każdego dysku, więc 'cd dysk:/ścieżka' zmienia bieżący katalog dla danego dysku.

Bakcyl napisał(a)

Czy do wyrażeń regularnych będę potrzebował bibliotek?

Manuala.

Bakcyl napisał(a)

I zależy mi na informacji, czy braki kompatybilności wstecznej pomiędzy wersjami danego języka, to wyjątek czy chleb powszedni?

W Pythonie to rzecz normalna, jak lubisz język kultywujący tradycję trzymania błędów projektowych to przejdź na PHP. Wypadałoby wspomnieć, że linia 2.x jest rozwijana niezależnie od 3.x, nadal.

...z drugiej strony Guido jest zwyczajnie je**ty, kilka razy chciał różne rzeczy usuwać z języka bo nagle doszedł do wniosku, że są za mało pythonowe.

0
MSM napisał(a)

Czemu uruchamiasz skrypty pythona z konsoli?

Bo tak w książce kazali …;)

MSM napisał(a)

na windowsie możesz po prostu dwakliknąć ikonkę skryptu i on się uruchomi...

Niestety, wtedy pojawia się wiersz poleceń, ale zaraz znika. Jest on pusty, ale jakby się dopatrzeć, to przez ułamek sekundy pojawia się Witaj Świecie, ale trwa to tyle, co sygnał podprogowy ;)

Shalom napisał(a)

Co rozumiesz przez "rozszerzenie" do programu? Chciałbyś dodać jakąś funkcjonalność albo coś takiego?

Tak myślałem, ale skoro to jest tak odległe, to zarzucam tę myśl ;-)

Czy w Perlu można też produkować .exe?

Zna ktoś może dobrą, aktualną książkę do Perla napisaną dla osób, które w ogóle zaczynają przygodę z programowaniem? Przeczytałbym rozdział z tej o Pythonie i o Perlu i wyciągnął wnioski.

Czy istnieją takie obróbki tekstu, które zrobię tylko w Perlu, a w Pythonie nie dam rady?

0

Niestety, wtedy pojawia się wiersz poleceń, ale zaraz znika. Jest on pusty, ale jakby się dopatrzeć, to przez ułamek sekundy pojawia się Witaj Świecie, ale trwa to tyle, co sygnał podprogowy

Dodawaj pod koniec każdego programu linijkę raw_input();. Sztuczka stara jak świat ;)

Czy w Perlu można też produkować .exe?

Wygooglełem: http://www.indigostar.com/perl2exe.php

Czy istnieją takie obróbki tekstu, które zrobię tylko w Perlu, a w Pythonie nie dam rady?

Raczej nie. Z drugiej strony, w brainf***u też da się zrobić takie obróbki tekstu jakie ci do głowy wpadną (zupełność w sensie maszyny turinga: to brzmi dumnie).

0
deus napisał(a)

...teksańskiej masakry kotem na klawiaturze...

szkoda, ze nie wymyslilem tego przed masakra bramka logiczna :D

//off top ;)

0

Dodawaj pod koniec każdego programu linijkę raw_input();. Sztuczka stara jak świat ;)

Niestety nadal występuje tylko mrugnięcie wiersza poleceń. Natomiast konsolowe uruchomienie skryptu z tym dodatkiem zwraca coś takiego:

user image

0

W tym wypadku nie raw_input() tylko input(). W Pythonie 2.x input robiło dodatkowo evala wczytanego stringa, zaś w 3.x usunięto raw_input, jego rolę przejął input, ewentualnego evala trzeba robić ręcznie. Usunięto w ten sposób jeden z większych idiotyzmów w języku.

Ja tam preferuję jawne używanie strumieni:

from sys import stdin
# ...
stdin.readline()

co ma tę zaletę, że jest przenośne i bezpieczne.

0

Dzięki. Ten sposób działa.

Będę się uczył Pythona.

Mam jeszcze tylko 1 pytanie. Czy w wyrażeniach regularnych były zmiany przy przejściu z wersji 2 na 3? Pytam, bo o 3 jest na razie jedna książka wydana po polsku + oficjalny manual w oryginale. O wersji 2 materiałów jest sporo.

0

Składnia wyrażeń się nie zmieniła, co najwyżej jakieś nowe rozszerzenia doszły, ale nie kojarzę żeby faktycznie coś przybyło.

0

OK. Dzięki za wszystkie wypowiedzi w tym temacie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1