Автор Тема: Установяване как завършва реда — \n, \r\n или \r  (Прочетена 2375 пъти)

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8911
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Здравейте,

Имам един елементарен въпрос, на които обаче поради не методичността на образованието си (сиреч самообучение), не знам отговора.

И така имаме някакъв текстов документ, какъвто и да е, няма значение за момента кодировка, съдържание или каквото и да било, обикновен текстов документ. Как мога със сигурност да разбера, с какви символи завършват редовете (май края на документа няма значение в случая).

Обикновените текстовите редактори, които знам и съм ползвал, са достатъчно умни, че в движение да преведат символите за край между трите ОС. Не мога по тях да разбера, като не ми се показват грешно документите, за които знам, че са направени под друга ОС.

Имам някакво предположение, че трябва да разгледам документа под някакъв шестнадесетичен редактор или нещо такова. Само дето не знам такива за любимата ОС. А и колкото пъти съм погледнал в такъв редактор, толкова пъти нищичко не съм разбрал, всичко е на марсиански.

Та така известни ли са Ви начини, как със сигурност да се установи, с каква поредица от служебни символи, завършва един ред?
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Изходът от командата file достатъчен ли ти е? Пример
Цитат
$ file proba
proba: ASCII text, with CRLF line terminators
CRLF са нови редове, като тези в Windows (\r\n).

Цитат
$ file proba
proba: ASCII text, with CR line terminators
CR са нови редове, като тези в Mac (\r).

Цитат
$ file proba
proba: ASCII text
Пример за изход, когато новите редове са като стандартно използваните в Линукс (\n).
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
cat -A при положение, че различните редове завършват различно и търсиш как завършва определен ред. Изходът не е толкова добре поднесен като file, но пък се вижда всеки конкретен ред.
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
А, да. За протокола, пример от file, когато имаме файл, в който различните редове завършват различно
Цитат
$ file proba
proba: ASCII text, with CRLF, CR, LF line terminators

Пак за протокола, с file може да се намери как завършва и точно определен ред, като се включи дебъгването (опцията "-d"), но... е по-голям мазохизъм от "cat -A", така че само в краен случай :)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

remotex

  • Напреднали
  • *****
  • Публикации: 344
    • Профил
jEdit
« Отговор #4 -: Oct 07, 2012, 20:38 »
Ако търсиш текстов редактор който показва това пробвай jedit
долу вдясно показва WMU : Windows, Mac, Unix  and click to change - ако искаш да го конвертира при запис
Активен

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8911
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Дежурен варианта ти е отличен, но не знам, какво да гледам на цат -А. Изкарва ми много неща, явно всичко дето не е латиница излиза зле. Доколкото разбирам ми изкарва съдържанието на файла. Малко трудно се ориентирах. По опит май стигнах до заключение, че нормалните излизат с $, а досовските с ^M$ накрая. Нямам намацан документ да видя те как излизат (би трябвало ^M).

Обаче трябва да намеря начин да видя само крайщата, защото редовете са дълги, излизат твърде неудобно на по няколко реда и е невъзможно да се обхванат с поглед в моя случай.  Ако знам точно колко са дълги редовете (еднакви са), мога ли някак си да изкарам само края им?

Нетер аз разбира се знаех за file, но досега не му намирах практическо приложение, защото за малкото неща дето не знам какви са, той не ми е давал информация. Сигурно следва някакъв ограничен стандарт.

В случая пробвах няколко неща. На едното ми даде:  UTF-8 Unicode text. Друг ми го даде UTF-8 Unicode text, with CRLF line terminators. Най-интересен ми беше тоя дето, най-много ме интересува. Той ми даде:

Non-ISO extended-ASCII text, with CRLF, NEL line terminators

Защо е Non-ISO extended-ASCII text, разбрах от предната си тема, дето се оказа, че е МИК. CRLF е това, от което се интересувам. Но какво е NEL line terminators  ???

Благодаря и на Ремотех. Да имам jedit, защото за него е писан Lazy8, който така и не подкарах, защото не можах да го свържа с мъсял :(

А да това -d ми изкара някакви много страшни неща от сорта на:
> 0 search/w/1,=<?XML,"broken XML document text"]
> 0 search/1,=begin ,"uuencoded or xxencoded text"]
> 0 search/1,=$\nship,"ship'd binary text"]
> 0 search/c/1,=@book{,"BibTeX text file"]
> 0 search/wc/4096,=<style,"HTML document text"]

И т.н. в само един средно дълъг документ (под сто реда), направо се уплаших и нищо не разбрах.

Отново благодаря и на трима Ви. Тоя форум е чисто злато.
« Последна редакция: Oct 07, 2012, 21:00 от go_fire »
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

remotex

  • Напреднали
  • *****
  • Публикации: 344
    • Профил
може и с mc
Midnight Commander демек
(за съжаление директно с mcedit не става щото го отваря за редакция)
mc
F3, после F4 (и F8/F9 евентуално)
вътре от редактора избираш кодировка с
alt-E
мисля че работи само с инсталираните на системно ниво или може би с каквото е компилиран...

П.П. Тези също вършат работа... ако файла има нов ред накрая - гледаш само последния символ
cat -e myfile.txt
^M = CR   $ = LF   ^M$ = CRLF
hexdump -c myfile.txt
\r = CR    \n = LF   \r\n = CRLF
« Последна редакция: Oct 07, 2012, 21:08 от remotex »
Активен

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8911
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Ремотех отново добро попадение. Най-после открих шестнадесетичен редактор и за ГНУ/Линукс. Редовете свършват на 0D 0A, както и очаквах. Но това е само, защото знам къде свършват редовете, обаче, ако не знаех, как се разбира стандартно?

А то не било редактор, а само преглеждачка (няма го в mcedit), ама то едва ли бих редактирал нещо в шестнадесетичен режим.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

remotex

  • Напреднали
  • *****
  • Публикации: 344
    • Профил
Най-общо казано - Не можеш "стандартно"
Трябва ти малко предварително познание т.е. повечето софтуер ползва нещо наречено "Автоматично откриване на езика" и на "Кодировката" т.е. горе-долу следното
1) трябва да се определи типа на файла - може да е двоичен тогава нямаш нови редове
2) каква му е кодировката - напр. при UCS-2 или др. бинарна кодировка може да имаш тези кодове 10 и 13 а случайни места т.е. всяка двубайтова комбинация в която поне единия байт е 10 или 13
В случай на UTF-8, plain text, local 8 bit: 1251, 1252, latin1 и пр. подобни обик. СПОКОЙНО може да се 3) приеме че са чист текст, но ДОРИ В един такъв файл може да имаш и от трите кодировки - какво правим тогава...

П.П. напр. след като вече имаш 16тичен редактов направи си сам един файл в който ред1-ДОС/Уин, ред2-Юникс, ред3-Мак. - като какъв очакваш да се разпознае автоматично?!

П.П.П. Инак "стандартно" първото което ми иде наум е следното :
с всеки редактор който поддържа т.нар. character(s) distribution, Statistic(s) и пр. което се среща най-често от тези трите 10, 13 и 1013 :-)
напр. с мойта okteta : Tools.Statistics [Build]
« Последна редакция: Oct 07, 2012, 21:18 от remotex »
Активен

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8911
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Е тук вече се предавам, много над моето ниво на разбиране е. Благодаря и за това hexdump, съвсем ясно си показва символите за край:

Цитат
[…]
*
0003240                   0   0   0   0   5   8  \r  \n   B   G   6   9
0003250   T   T   B   B   9   4   0   0   1   5   2   4   2   4   5   1
0003260   1   6                                                   5   8
0003270   0   4   0   9   1   7   3   2 236   �   �   �     202   �   �
0003280   �   �   �   �   �   �   �     202   �   �   �   �   �   �   
0003290           1   0   /   0   9   /   1   2                       
00032a0               6   2   8   .   0   6   B   G   N   3   1   0   0
00032b0   0   4   6   0   8   5                                       
00032c0           0   0   0   1   5   2   0   6   1     217 214 203   
00032d0   " 205   �   �   �   �   �     200   �   �   �   �       I   "
00032e0                           1   0   /   0   9   /   1   2 207   �
00032f0   �   �   �   �   �                                           
0003300                                                               
*
0003320           0   0   0   0   5   9  \r  \n                       
0003330                                             216 201 231 200   
0003340 221 223 214 200   :                                           
0003350               2   6   0   0   6   .   5   0  \r  \n         
« Последна редакция: Oct 07, 2012, 21:20 от go_fire »
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Не е нужно да се минава през mc, за да отвори файла в режим за преглед (F3) - има си директен mcview. А и с mcedit се вижда какъв е типът на новите редове. Например
Цитат
едно^Mдве
три^M
четири
Между "едно" и "две" имаме CR (\r), между "две" и "три" имаме LF (\n), а между "три" и "четири" имаме CRLF (\r\n). По същия начин, както при "cat -A" имаме съответно ^M, $ и ^M$.

go_fire, по-подробно описание за NEL има тук. А за страшните редове във "file -d", не им обръщай внимание. Теб те интересува тази част от изхода
Цитат
mget @0: edno\rdve\ntri\r\nchetriri\n\000\000\000\000\000\000\000\000\000
където можеш да видиш новите редове, изписани в познатите ти символи \r, \n и \r\n.

В крайна сметка mcedit и mcview май ти вършат най-добра работа, заради по-лесното превключване между различни кодировки :) В mcview текстът ти в не-hex формат седи от дясната част на екрана.
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8911
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Благодаря Нетер. Странно, че mcedit ми дава €М за редовете, които всички останали до тук цитирани начини показваха €М$. Иначе съвсем определено е най-прегледно с тях двете.

Направо се шашнах, не подозирах, че съществуват толкова много начини.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

remotex

  • Напреднали
  • *****
  • Публикации: 344
    • Профил
neter проблемът му е че показва същото '^M' както за ДОС/Уин така и за МАК
Как да ги разграничи двете

и аз лично бих предпочел tail | hexdump и да се гледа само как свършва последния ред
а между другото не знам tail как ще преброи редовете

П.П. А бе вие направихте ли си поне 3 различни файла с ДОС, Юникс, Мак преди да пробвате  8)
Даже сега май се сещам че може-би ще стане и с hexdump | grep с опции да ти преброи колко пъти се среща само всяко едно от тези \r, \n, \r\n


П.П.П. Опа малка корекция - мислех че за mc, mcedit, mcview говорим още (при тях НЯМА разлика) - инак да има разлика при (cat -e) ^M, ^M$ и само $
но пък тук проблемът е че не е scriptable щото извътре самия текст може да има и той тези ^M, $ така и те ще влязът в общата бройка...
а бе e/f/grep не може да няма начин да брои и бр. срещания на 1 символ па бил той и бинарен

от мен толкова, че и др. задачи ме чакат...
Колкото ми се удава толкова - дет се вика.
Лек ден колеги.
« Последна редакция: Oct 07, 2012, 21:38 от remotex »
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Странно, че mcedit ми дава €М за редовете, които всички останали до тук цитирани начини показваха €М$.
Сигурен съм, че пак ти ги показва като ^M$, но не си обърнал внимание, че следващата дума е на нов ред, което показва, че $ си го има. Ето разделени примери. За ^M
Цитат
едно^Mдве
За ^M$
Цитат
едно^M
две
Има разлика, нали? :)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

laskov

  • Напреднали
  • *****
  • Публикации: 3182
    • Профил
Всъщност, кое е нужно? Да се знае или да се конвертира? Ако е второто - има инструменти за целта. google знае.
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3