Author Topic: STRFILTER как вырезать в строке символ " ?  (Read 2876 times)

0 Members and 1 Guest are viewing this topic.

wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Помогите пожалуйста,
Есть текстовый файл откуда беру строки с помощью TOCLIP (TFREAD ("input.txt", $a)), при этом пустые строки интерпретируются как "", те входной файл к примеру
строка1

строка2

на выходе получаем:
строка1
""
строка2

По этой причине хочу их вырезать TOCLIP (STRFILTER (TFREAD ("input.txt", $a),""", 0)) но как понимаете ничего хорошего из """ не получилось.
Подскажите , какую последовательность нужно использовать чтобы вырезать " ?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #1 on: January 16, 2017, 11:30:17 AM »
А зачем ты пытаешься отправить в буфер пустоту? Нужно просто пропускать такие строки измеряя их длину
Code: (clickermann) [Select]
FOR($a=1,$a<TFCOUNT("input.txt")+1)
   $str = TFREAD ("input.txt", $a)
   IF(STRLEN($str) > 0)
      TOCLIP($str)
     
     
   END_IF
END_CYC


wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #2 on: January 16, 2017, 11:39:01 AM »
Приходится, иначе  в выходном файле нарушится форматирование, те мне в выходной файл придется писать пустые строки. Хотел более простую конструкцию.
« Last Edit: January 16, 2017, 11:48:51 AM by wireshark »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #3 on: January 16, 2017, 12:13:26 PM »
Похоже что ты используешь 4.13
В 4.12 такой проблемы нет. Пустая строка не создает ""

wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #4 on: January 16, 2017, 12:32:08 PM »
Ага) 4.13,  4.12 не делает "", но у него кошмар с кодировкой начался, возможно ее надо принудительно задать для 4.12? Пробовал через SETKBLAYOUT(WNDFIND("name", 0), 1049) ничего не вышло, текст сохранял и в UTF-8 и ANSI и Юникоде
« Last Edit: January 16, 2017, 12:38:07 PM by wireshark »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #5 on: January 16, 2017, 12:42:44 PM »
Интересно как ты в Юникоде сохранил  :) но при этом не UTF-8.
До 4.13 кодировка должна быть cp1251 она же Win-1251. ANSI - кодировка системы. Для русского это обычно та же cp1251.
« Last Edit: January 16, 2017, 12:47:44 PM by Vint »


wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #6 on: January 16, 2017, 12:48:03 PM »
Еще раз через notepad++ сделал конвертацию в ansi и сохранил. Пофиг вот, что получаю Ðåàëèòè-øîó.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #7 on: January 16, 2017, 01:07:51 PM »
Ну так это не cp1251


wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #8 on: January 16, 2017, 01:09:50 PM »
А чем пользовались, что за сервис? Видимо из-за перекодировки из UTF-8 криво конвертировался.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #9 on: January 16, 2017, 01:11:06 PM »
ANSI будет cp1251 если винда русская и раскладка русская.
В твоей системе стоит ISO-8859-1 - где коды от 160 до 255 содержат символы, используемые в западно-европейских странах.
У тебя с вероятностью 95% стоит для украинского языка.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #10 on: January 16, 2017, 01:13:15 PM »
А чем пользовались, что за сервис? Видимо из-за перекодировки из UTF-8 криво конвертировался.
http://www.online-decoder.com/ru

Ещё бывает пробую в этих
https://2cyr.com/decode/
https://www.artlebedev.ru/tools/decoder/


wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #11 on: January 16, 2017, 01:17:39 PM »
Спасибо! Сейчас проверил, исходный распознается как UTF-8, хотя в notepad++ указывается как ANSI. Судя по всему проблема в исходном файле.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #12 on: January 16, 2017, 01:43:55 PM »
У меня были файлы, где Notepad++ неправильно определял и ставил кодировку.
Отключил
Опции -->> Настройки -->> Разное -->>
снять Авто-определение кодировки символов.


wireshark

  • Освоившийся
  • **
  • Posts: 49
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #13 on: January 16, 2017, 03:50:35 PM »
В общем помучившись с кодировками вернулся на 4.13, поскольку выгрызть "" не получилось, воспользовался советом Oraven и дописал код, но тут ждала засада, 4.13 воспринимает "" пустой строки как 2 символа, пришлось пожертвовать строками с 2 и менее символами, благо таких почти нет.
Code: [Select]
FOR($a=1,$a<TFCOUNT("input.txt")+1)
   $str = TFREAD ("input.txt", $a)
   IF(STRLEN($str) > 2)
      TOCLIP($str)
   ELSE
         STRWRITELN ("output.txt", " ")
   END_IF
END_CYC

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: STRFILTER как вырезать в строке символ " ?
« Reply #14 on: January 16, 2017, 04:21:02 PM »
Просто проверь на неравенство двум кавычкам
Code: (clickermann) [Select]
FOR($a=1, $a < TFCOUNT("input.txt")+1)
    $str = TFREAD ("input.txt", $a)   
    IF((STRLEN($str) > 0) & (STRMD5($str) ! "9D4568C009D203AB10E33EA9953A0264"))
        TOCLIP($str)
    ELSE
        STRWRITELN ("output.txt", " ")
    END_IF
END_CYC