Страница 1 из 2
Невидимые символы
Добавлено: 19.07.2016 12: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 13:15:58
Лекс Айрин
А пробовал #0? Символы табуляции?
Re: Невидимые символы
Добавлено: 19.07.2016 13:41:34
arriah
Лекс Айрин писал(а):А пробовал #0? Символы табуляции?
#0 попробую как домой вернусь, а табуляцию (#9) пробовал
Re: Невидимые символы
Добавлено: 19.07.2016 13:51:05
Лекс Айрин
табуляция бывает как горизонтальная, так и вертикальная 0B(11). Возможно, что это какой-то управляющий юникодный символ.
Re: Невидимые символы
Добавлено: 19.07.2016 14: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 14:31:18
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 15: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 16:58:30
arriah
Лекс Айрин писал(а):проверьте так же
Спасибо. А то я или не так гуглил или меня в гугле забанили

LF - #10
CR - #13
Эти я проверял
Остальные проверю вечером
Re: Невидимые символы
Добавлено: 19.07.2016 17:07:07
Лекс Айрин
arriah, скорее, все же не так. Мой запрос "юникодный конец строки" Кстати,только теперь заметил в нем опечатку. Искал юниксовый
Re: Невидимые символы
Добавлено: 19.07.2016 22:45:26
arriah
Лекс Айрин писал(а):arriah, скорее, все же не так. Мой запрос "юникодный конец строки" Кстати,только теперь заметил в нем опечатку. Искал юниксовый
По иронии судьбы - этот файлик уже куда-то делся

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

Re: Невидимые символы
Добавлено: 20.07.2016 08:22:28
Лекс Айрин
arriah вообще, такие вещи надо хранить отдельно -- для тестов.
Re: Невидимые символы
Добавлено: 22.07.2016 14:12:48
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 14:46:04
pupsik
А что это покажет?
Код: Выделить всё
for k := 1 to Length(str) do
ss := ss + '$'+IntToHex(Ord(str[k]),2)) ;
Re: Невидимые символы
Добавлено: 22.07.2016 15: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 15:22:52
pupsik
2 пробела, 1 NO-BREAK SPACE и пробел???
Где NO-BREAK SPACE -неразрывный пробел. Т.е. просто пробелы?