Autor Wątek: Windows CMD - jak rozpoznać i zamienić [CR][LF]  (Przeczytany 8390 razy)

gregoryi

  • ****
  • Wiadomości: 288
  • Miejsce pobytu:
    Opole
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #15 dnia: 2018.02.27, 09:35:20 »
Jak robiłbym to pod bashem to i owszem.
Problem w tym, że robione jest to pod cmd.
W cmd nie ma znaczników CR LF otwarcie i trzeba kombinować, pod bashem robisz prosto sed s/_CRLF_/\r\n/g i koniec.
Niestety sed pod windowsa tak nie działa, on nie wie, że \r\n to znaczniki końca linii i wstawawia do wyniku \r\n zamiast _CRLF_.
Z godzinę spędziłem z sed'em by ten wstawił mi CRLF do pliku.
Wstawiania znaczników ukrywających nie przynosiło tego co oczekiwałem.
Z 15 minut z tr'em by wstawić CRLF.
ZX Spectrum 16, ZX Spectrum 48, ZX Spectrum 128 +2 Grey, ZX Spectrum 128 +3, Amstrad 6128, Commodore 64C, Amiga 600, Klony - Harlequin 48 Rev G, Harlequin 128 Rev 2D, Just Speecy 128, ZX Nuvo 128

smok.wawelski

  • ***
  • Wiadomości: 225
  • Miejsce pobytu:
    Warszawa
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #16 dnia: 2018.02.27, 11:23:07 »
tr potrafi zamieniać tylko pojedyncze znaki, więc nie da się LF zamienić na CRLF
Faktycznie sed pod windows jest nieco ułomny więc najprościej co udało mi się zrobić to:

dos2unix -n in.txt out.txt - CRLF na LF
a potem
unix2dos -n out.txt out2.txt - LF na CRLF

Dalej mamy dwa .exe. niestety.
Awk pod Windows jest równie ułomny, więc zawsze trzeba by użyć kombinacji tr/awk lub tr/sed co nie ma sensu.

http://dos2unix.sourceforge.net/

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #17 dnia: 2018.02.27, 16:25:21 »
Jeżeli nie upierwasz się że to ma być windows, z do tego typu rzeczy idealnie nadają się unixowe skrypty.. to może zainstalowanie cygwina lub podobnych narzędzi pomoże? Będzie perl, awk, sed itp.

PABB

  • *****
  • Wiadomości: 1098
  • Miejsce pobytu:
    Bielsko-Biała
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #18 dnia: 2018.02.27, 17:53:25 »
Jeżeli nie upierwasz się że to ma być windows, z do tego typu rzeczy idealnie nadają się unixowe skrypty.. to może zainstalowanie cygwina lub podobnych narzędzi pomoże? Będzie perl, awk, sed itp.

Jeżeli korzystasz z Windows 10, to możesz doinstalować "Windows Subsystem for Linux" -> złośliwi twierdzą, że nic lepszego na tę platformę się nie pojawiło :P Dostęp do shella i jego narzędzi z bezpośrednim i bezproblemowym dostępem do plików Windows :)


gregoryi

  • ****
  • Wiadomości: 288
  • Miejsce pobytu:
    Opole
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #19 dnia: 2018.02.27, 21:12:02 »
Problemem nie jest to, czym to zrobić (konwersja).
Myślę, że koledze bardziej chodzi o narzędzie uniwersalne działające bez dodatkowych opcji, kitów, dodatków i tym podobnych.
Język skryptowy cmd jest bardzo okrojony, nie został do tego stworzony by być zaawansowanym narzędziem (bardziej powłoką).
Z tym, że jest w miarę prosty do nauczenia się i dość szybko można opanować zaawansowaną składnię.
Ma być prosto i zrozumiale.

Postaram się przetworzyć ten skrypt tak by był uniwersalny.
Może uda mi się usiąść do niego w czwartek, jeżeli nie zdążę to dopiero w poniedziałek będę miał więcej czasu.

Pozdrawiam
ZX Spectrum 16, ZX Spectrum 48, ZX Spectrum 128 +2 Grey, ZX Spectrum 128 +3, Amstrad 6128, Commodore 64C, Amiga 600, Klony - Harlequin 48 Rev G, Harlequin 128 Rev 2D, Just Speecy 128, ZX Nuvo 128

gregoryi

  • ****
  • Wiadomości: 288
  • Miejsce pobytu:
    Opole
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #20 dnia: 2018.02.27, 21:47:56 »
Wersja druga bardziej uniwersalna, chociaż i tak z ograniczeniami.

Pozdrawiam
ZX Spectrum 16, ZX Spectrum 48, ZX Spectrum 128 +2 Grey, ZX Spectrum 128 +3, Amstrad 6128, Commodore 64C, Amiga 600, Klony - Harlequin 48 Rev G, Harlequin 128 Rev 2D, Just Speecy 128, ZX Nuvo 128

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #21 dnia: 2018.02.28, 01:42:01 »
Dokładnie tak jak mówi Gregoryi. Piszę pierwszy program na inną platformę niż ZX. A że CMD bardzo przypomina mi Basic, dlatego na niego się zdecydowałem.
Jedna rzecz to napisać, ale ważniejsza zrozumieć. Tak aby po otwarciu pliku po kilkudniowej przerwie, po samej składni wiedzieć, co robi i co jest do zrobienia. Zainstalować zaawansowane środowiska zawsze można, ale co z tego, kiedy ja się w tym nie połapię.

Sam eksperymentuję szukając rozwiązań na forach i różnych portalach, ale ten problem nowej linii wydaje się nie do przeskoczenia.

Dziś nic nie piszę, ale spróbuję czegoś innego.
Standardowy plik .ini (czyli każda wartość w osobnej linii) rozbić na pojedyncze pliki tekstowe, w każdym jedna linia.
Czyli mam licznik od linii 001
jeśli linia nie jest pusta lub jej pierwsze 3 znaki to nie EOF,
to skrypt eksportuje pierwszą linię do pliku 001.txt
odrzuca pierwszą linię z pliku .ini i i zapisuje go jako tymczasowy plik tekstowy.
Zwiększa licznik i tak do końca.
Oby tylko tu nie było tego samego problemu z rozpoznaniem końca linii.

O co mi właściwie chodzi, to wczytanie danych po Author= Misc= CodeName= itd. czyli wszystkiego między pierwszym znakiem = a końcem linii do zmiennych, które będzie można później edytować.

Przesyłam taki typowy .ini






AY Music, ULA plus.

steev

  • *****
  • Wiadomości: 1362
  • Miejsce pobytu:
    inode 42
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #22 dnia: 2018.02.28, 12:13:09 »
Dokładnie tak jak mówi Gregoryi. Piszę pierwszy program na inną platformę niż ZX. A że CMD bardzo przypomina mi Basic, dlatego na niego się zdecydowałem.
Całkiem zrozumiałe...
Jak już / jeśli jednak dotrzesz do punktu w którym uznasz że nie tędy droga, rozważ proszę takie alternatywy :
  • python (podobno łatwy, popularny,  wszędzie znajdziesz pomoc)
  • lua (nic nie trzeba instalować, wrzucasz dwa pliki do katalogu i już)
  • rexx (chyba najbardziej zbliżony do basica)
  • perl (dla ambitnych)
  • vbfa (z msoffice/libreoffice/openoffice)
Jak wyglądają programy napisane w tych językach możesz zobaczyć np. na Rosetta Code
Machines should work. People should think.

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #23 dnia: 2018.02.28, 20:26:07 »
Dokładnie tak jak mówi Gregoryi. Piszę pierwszy program na inną platformę niż ZX. A że CMD bardzo przypomina mi Basic, dlatego na niego się zdecydowałem.
Może najłatwiej było by sięgnąć po Visual Basic Script tzw. VBS

Obsługuje to każdy współczesny windows a środowiskiem z kolorowaniem składni jest notepad++.

W 100% obsłuży twoje wymagania - jak chcesz podeślę ci dokumentację i ewentualnie kilka przykładów na czytanie i pisanie plików.

Wszystkich instrukcji jest mniej niż w ZX Spectrum  ale to jest potężne narzędzie w odpowiednich rękach. Funkcjonalnie jest w 100% zgodny z Visual Basic i Visual Basic for Applications oraz ASP Classic.
Latami w tym pisałem zarobkowo ;)
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #24 dnia: 2018.02.28, 20:47:09 »
Silenter, jeśli już tu jesteś, powiedz mi w jaki sposób mogę użyć plików .dll, które napisałeś? Mam na myśli AYTools. Po skompilowaniu ich otrzymałem pliki AYFile.dll i AYFileTests.dll
AY Music, ULA plus.

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #25 dnia: 2018.02.28, 21:04:27 »
Silenter, jeśli już tu jesteś, powiedz mi w jaki sposób mogę użyć plików .dll, które napisałeś? Mam na myśli AYTools. Po skompilowaniu ich otrzymałem pliki AYFile.dll i AYFileTests.dll
AYFile.dll zawiera zasadniczy kod procedur AYgrekowych

AYFileTests.dll jest biblioteką testów jednostkowych dla AYFile.dll. Zasadniczo możesz to olać.

Jak mi podeślesz te źródełka, bo ja już je gdzieś zapodziałem - to ci szybciutko przerobię AYFile.dll na AYFile.Exe.
(w ustawieniach projektu trzeba przestawić z [Output Type: Class Library] na [Output Type: Console Application])
Dołożyć w jakiejś klasie statyczną metodę [main] a w niej już używanie tych metod które są w projekcie AYFile.
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #26 dnia: 2018.02.28, 22:43:16 »
Przesyłam cały zip AYFile, razem z tym, co kompilator wygenerował. Prześlij mi tylko te pliki, które poprawisz.

@Steev: W lua piszę piloty dla aplikacji Unified Remote. Wystarczy zapomnieć jednego ; na końcu linii
i już cały pakiet nie chodzi. Nie tylko jeden pilot, ale cały zestaw kilkudziesięciu pilotów. Bez żadnego komunikatu o błędzie.
AY Music, ULA plus.

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #27 dnia: 2018.02.28, 23:27:01 »
Masz już aplikację konsolową
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #28 dnia: 2018.03.17, 07:08:36 »
Poradziłem sobie z rozbiciem plików .ini na linie i złożeniem ponownie. To najważniejsza część - dostać się do każdej linii, edytować, zapisać i złożyć z niego nowy .ini (lub kilkadziesiąt nowych .ini) a następnie AYMaker złoży to wszystko po edycji.
Pomogła mi w tym instrukcja more +1 która przerzuca pierwszą linię do nowego pliku.

Wszystko idzie pięknie z wyjątkiem interpretacji liczb.
Chcę, żeby każdy numer zapisany był w formie trzycyfrowej i na tym dziś poległem.
Do tej pory wykorzystywałem taką regułę
set filecount=0
...
set /a filecount+=1
if !filecount! lss 100 set filecount=0!filecount!
if !filecount! lss 10 set filecount=0!filecount!
Było dobrze, dopóki nie spróbowalem przetworzyć 10 lub więcej plików,
gdy plik zawieral więcej niż 10 linii, czy w pliku było więcej niż 10 utworów. Licznik zerował się po 9.
Próbowalem różne warianty set /a (arytmetycznie) zamiast zwykłego set - to z kolei miał problem z utworzeniem pliku o danym numerze.
Początkowa wartość =001 zamiast =1 też nic albo niewiele daje.
Zmiana kolejnosci warunków IF nic nie daje, albo całkiem zmienia numer np na 00001
Jeszcze próba w ten sposób, aby po każdym IF skoczył do etykiety całkiem pomieszała kolejność, choć każda etykieta miała swoją nazwę.
if !filecount! lss 10 (set filecount=00!filecount! & goto :labelaa)
if !filecount! lss 100 (set filecount=0!filecount! & goto :labelaa)
:labelaa

Z kolei gdy pliki są numerowane 1, 2, 3 ... 10, 11, 100, to przetwarzane są w kolejności alfabetycznej, czyli 1, 10, 100, 11, 2, 3 (załącznik)
Gdy z tym się uporam, będzie można zabierać się za pisanie edytora i przedstawić testową wersję na forum. Na razie mam pause co kilka linii, aby sprawdzać co i kiedy tworzy.
 
Tak przy okazji, czy CMD obsługuje HEX? To byłoby idealne. Nie ma znaczenia jak są pliki ponumerowane, ważne żeby były kolejno.
Jeśli trzeba, to użyję SED, choć jeszcze nie dotarłem do jego składni i parametrów.

------------------------------------------------

Aplikacja Ayfile.exe nie chodzi, chyba że źle ją uruchamiam. Wrzucam do folderu plik .ay i startuję
Ayfile example.ayWrzucam plik .ini + .bin i tak samo.
Ayfile.exe example.iniNie wiem, co w ogóle ma robić. Rozkładać czy składać plik? Błąd w obu przypadkach jest podobny (w zalączniku 2).
Na razie pozostaję przy drobnych modyfikacjach oryginalnych źródeł w delphi. 
AY Music, ULA plus.

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Odp: Windows CMD - jak rozpoznać i zamienić [CR][LF]
« Odpowiedź #29 dnia: 2018.03.17, 09:42:10 »
daj pełną ścieżkę do pliku ay i zadziała
np:
AyFile.exe c:\plikiay\test.ay
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A