Страница 1 из 2

Невидимые символы

СообщениеДобавлено: 19.07.2016 13:35:52
arriah
Какие есть невидимые, непечатные символы?
Ситуация такая, в TSTringList есть строки, некоторые из них пустые, вот надо удалить пустые строки написал такое:

Код: Выделить всё
for i:=StringList.Count-1 downto 0 do begin
   If trim(StringList[i])='' then StringList.Delete(i);
end;

Удалzются все пустые строки, но некоторые нехотят. Ствил дополительные проверки на #9, #13#10, #10, #255 - все равно не удаляются.
длина неудаляемой строки показывает 2
Копировал в notepad++ включал там отображение всех символов - данный символ показывается типа пробел, и не имеет никакого визуального оформления - копировал его в буфер, вставлял в в прогу - удаляет. Пробовал получить его код - не отдает...
Что это может быть за символ?

Re: Невидимые символы

СообщениеДобавлено: 19.07.2016 14:15:58
Лекс Айрин
А пробовал #0? Символы табуляции?

Re: Невидимые символы

СообщениеДобавлено: 19.07.2016 14:41:34
arriah
Лекс Айрин писал(а):А пробовал #0? Символы табуляции?

#0 попробую как домой вернусь, а табуляцию (#9) пробовал

Re: Невидимые символы

СообщениеДобавлено: 19.07.2016 14:51:05
Лекс Айрин
табуляция бывает как горизонтальная, так и вертикальная 0B(11). Возможно, что это какой-то управляющий юникодный символ.

Re: Невидимые символы

СообщениеДобавлено: 19.07.2016 15:22:54
pupsik
а что length говорит?
т.е.
Код: Выделить всё
for i:=StringList.Count-1 downto 0 do begin
   If utf8length(utf8trim(StringList[i])) = 0 then StringList.Delete(i);
end;

Вроде в stringlist utf8 должен быть.

Re: Невидимые символы

СообщениеДобавлено: 19.07.2016 15:30:03
arriah
Лекс Айрин писал(а):табуляция бывает как горизонтальная, так и вертикальная 0B(11). Возможно, что это какой-то управляющий юникодный символ.

Хм, вот этого не знал. Проверю

Добавлено спустя 1 минуту 15 секунд:
pupsik писал(а):а что length говорит?
т.е.
Код: Выделить всё
for i:=StringList.Count-1 downto 0 do begin
   If utf8length(utf8trim(StringList[i])) = 0 then StringList.Delete(i);
end;

Вроде в stringlist utf8 должен быть.

Вечером проверю, обычный length (без utf8) говорит - 2

Re: Невидимые символы

СообщениеДобавлено: 19.07.2016 16:57:19
Лекс Айрин
arriah, я начинал с доса -- там управляющие символы использовались намного чаще. И более широкий ассортимент.

я бы, кстати,если нет других особенностей типа использования символов нот, перевернул задачу. Легче проверить есть ли в строке определенные символы (латинские/русские буквы, знаки препинания и цифры) и если нет, то удалить.

При этом, не стоит забывать, что в некоторых шрифтах неиспользуемые символы типа 3/8 отображаются как пробелы.

arriah писал(а):Вечером проверю, обычный length (без utf8) говорит - 2

проверьте так же

Код: Выделить всё
- LF (U+000A): англ. line feed — подача строки;
- CR (U+000D): англ. carriage return — возврат каретки;
- NEL (U+0085): англ. next line — переход на следующую строку;
- LS (U+2028): англ. line separator — разделитель строк;
- PS (U+2029): англ. paragraph separator — разделитель абзацев.

Re: Невидимые символы

СообщениеДобавлено: 19.07.2016 17:58:30
arriah
Лекс Айрин писал(а):проверьте так же

Спасибо. А то я или не так гуглил или меня в гугле забанили :)

LF - #10
CR - #13

Эти я проверял
Остальные проверю вечером

Re: Невидимые символы

СообщениеДобавлено: 19.07.2016 18:07:07
Лекс Айрин
arriah, скорее, все же не так. Мой запрос "юникодный конец строки" Кстати,только теперь заметил в нем опечатку. Искал юниксовый

Re: Невидимые символы

СообщениеДобавлено: 19.07.2016 23:45:26
arriah
Лекс Айрин писал(а):arriah, скорее, все же не так. Мой запрос "юникодный конец строки" Кстати,только теперь заметил в нем опечатку. Искал юниксовый

По иронии судьбы - этот файлик уже куда-то делся :) Видать без меня его обработали (в принципе пустая строка ни на что не влияет, но хочется красоты и порядка) - появится еще подобны файлик - буду проверять :)

Re: Невидимые символы

СообщениеДобавлено: 20.07.2016 09:22:28
Лекс Айрин
arriah вообще, такие вещи надо хранить отдельно -- для тестов.

Re: Невидимые символы

СообщениеДобавлено: 22.07.2016 14:16:06
arriah
Лекс Айрин писал(а):arriah вообще, такие вещи надо хранить отдельно -- для тестов.

конечно надо :) Но так как данные поступают из разных мест, то вероятность получения такой "вещи" почти 100% - вот я ее и получил.
Попробовал utf8trim - проблема исчезла, но как говорит Задорнов "эксперимент-то не завершен!".. хочется определить этот долбанный символ...
Со структурой UTF8 знаком мало, только в переделах функций из lazUTF8.

Но то что эта зараз юникодная - сомнений не осталось.
Подскажите примером кода - как получить код этого символа в unicode?

Добавлено спустя 56 минут 42 секунды:
вот такой код
Код: Выделить всё
var
s:char;
ss:string;
begin
   if utf8trim(str)='' then
   begin
     ss:='';
     for k:=1 to length(str) do begin
      s:=str[k];
      ss:=ss+IntToStr(ord(s))+'  ';
     end;
     showmessage(ss);
end;
end;   

выдает результат: 32 32 194 160 32

Re: Невидимые символы

СообщениеДобавлено: 22.07.2016 15:46:04
pupsik
А что это покажет?
Код: Выделить всё
for k := 1 to Length(str) do
  ss := ss + '$'+IntToHex(Ord(str[k]),2)) ;

Re: Невидимые символы

СообщениеДобавлено: 22.07.2016 16:15:43
arriah
pupsik писал(а):А что это покажет?
Код: Выделить всё
for k := 1 to Length(str) do
  ss := ss + '$'+IntToHex(Ord(str[k]),2)) ;

тоже самое только в Hex:
$20 $20 $C2 $A0 $20

Re: Невидимые символы

СообщениеДобавлено: 22.07.2016 16:22:52
pupsik
2 пробела, 1 NO-BREAK SPACE и пробел???
Где NO-BREAK SPACE -неразрывный пробел. Т.е. просто пробелы?