Замечания и предложения

А если я хочу заменить только вхождения, номера которых определяются по закoну i(a,b,c,d,e) ? Так можно дойти до любой безумной идеи. Вы предлагаете вымороченный случай, который может и встретится один на тысячу. А я веду речь о случае (к примеру, первое вхождение), который встречается не реже, чем замена всех вхождений.

Замена последнего или предпоследнего вхождения может быть не менее используемой операцией, чем замена первого. Ваш вариант функции этого не позволяет. Где принцип равноправия? Лимит замен это какой-то абсолютно бесполезный параметр. Уж лучше ввести функцию ReplaceFirst, либо еще лучше параметр-функтор куда передается индекс вхождения подстроки.

Ладно, будем считать, что в Microsoft и в Googlе сидят дураки, которые этот параметр придумали.

Может вынести разные процедуры в какой-нибудь модуль типа StrUtils? Кстати, когда я попытался перенести в программу на PascalABC.NET возможность работы с 2-3 частыми кодировками, у меня так ничего и не получилось за разумное время. Хотя, UTF-16 по умолчанию используемая в .NET не всегда удобна, пришлось вообще ничего не трогать и оставить как есть, но даже при этом откуда-то лезут непонятные баги при работе с русскими словами.

В смысле? Файл писать можно в любой кодировке. В памяти символы хранятся в двухбайтовом Unicode. Что может быть здесь неудобным?

Двухбайтовая кодировка неудобна из-за отсутствия разумной альтернативы set of char. А с переводом из одной кодировки в другую в памяти я что-то так и не разобрался. Как работать с файлами в разных кодировках я может просто не нашёл, если это есть.

В System.IO.File можно выбрать какой кодировкой читать/записывать файл.

1 лайк

Спасибо. Надо как-нибудь попробовать, не совсем понятно, какие там кодировки можно использовать, сейчас вроде просто вводится число 1251 и работает кодировка CP1251. Может ещё потребоваться UTF-8, консольная кодировка (CP866 ?) и сам Unicode. Но это всё для “развлечений” типа TRAC4, а по работе мне с базами данных надо обычно разбираться. При этом есть куча старых баз в формате какого-нибудь dbase или FoxPro, который достаточно прост, но, бинарный и нужны AnsiChar, AnsiString и перевод кодировок в памяти, чтобы с такими данными работать.

VFP умеет выгружать таблицы в любой указанной кодировке, кроме, пожалуй UNICODE (т.е. я в последнем не уверен, не приходилось). В MS SQL есть утилита, позволяющая загрузить почти все, что угодно. Да масса есть перекодировщиков…

Если всё правильно набрано. А если даты набраны как придётся, числа в перемешку то с точкой, то с запятой. Там же всё в строковых переменных. Какие-то кодовые страницы непонятные. Была идея даже вот нейросети попробовать.

Если набрано неправильно, то чем Вам Паскаль поможет? И потом, там отнюдь не все в строках, это Вы зря… И на том же VFP обработка данных, особенно строк, намного удобнее, чем даже в PascalABC.NET, потому что там функций строковых - выше крыши. Кстати, и работа с регулярками через RegExp поддерживается, если нужны сложные фокусы…

Паскаль поможет тем, что можно работать с “сырыми данными” прямо из файлов, если нужно. Формат dbf состоит из заголовка и следующего за ним набора полей равной длины, в которых хранятся именно char того до-юникодовского времени. Я уж не помню, пихает ли FP туда какие-нибудь double. У меня коллега VFP в основном увлекается. Но работать с двухбайтовыми char действительно не очень удобно. Ладно, забили уже давно с set в стиле bit array, но вот array от 8-битных char были-бы всё-таки предпочтительнее в смысле производительности.

Я всё же открыл паскаль… И за 2 мин вот это собрал:

begin
  var enc := System.Text.Encoding.GetEncoding(1251);
  var s:string := 'Hello, World! Привет, мир!';
  var byte_arr := enc.GetBytes(s);
  var s2 := new string(enc.GetChars(byte_arr));
  writeln(s2);
end.

Это, случайно, не то что вам надо? Я просто скопировал работу ChrAnsi

1 лайк

Да, для проблем типа чтения из файлов, которую я описал, это скорее всего, подходит. GetEncoding(866) тоже вроде работает.

А можно средствами языка определить class AnsiString (содержащий array of byte), чтобы преобразования происходили автоматически. Или там какие-нибудь нежелательные эффекты начнутся если после этого подставлять во всякие функции и выражения переменные такого типа вместо string?

Нежелательные эффекты зависят от того как вы реализуете))). И подставлять во всякие функции можно по разному. К примеру можно написать перегрузки, а можно сделать оператор implicit для вашего типа. Или и то и то. Только предлагаю писать в какой то другой теме или создать новую для этого всего.

Вопрос ко всему коммьюнити! Кто что думает по данному поводу:

Недавно оформил формальную задачу по мотивам обращения незрячего студента. Буквально через несколько минут @admin закрыл issue с формулировкой:

“Добиться совместимости редактора для его озвучивания стандартными скрин-ридерами:”

Этого мы не сможем сделать

Собственно, ни в одной из просмотренных мной IDE нет такого чтобы все пункты меню покрывались горячими клавишами.

Я сильно возмущен такой реакцией, мой комментарий – там же на гитхабе. Если качественные, конструктивные предложения будут вот так с порога отвергаться по надуманным предлогам, какой смысл вообще что-то предлагать и помогать?!

Может быть у кого-то есть иные предложения, как помочь конкретному вышеупомянутому человеку и другим, таким же как он?

Давайте договоримся, что Вы называете качественными предложениями. С моей точки зрения если предложение не может быть выполнено, то оно некачественное. И надо предлагать другое. Либо предлагать свои силы в выполнении.

Ещё раз подчеркну - невозможность выполнения - это не надуманный предлог

И хочу напомнить, что комьюнити в опенсорс проектах - это сообщество тех, кто реализует, а не тех, кто указывает

4 лайка

Давайте!

Качественным я называю предложение: (а) продуманное, (б) конструктивное, (в) грамотно оформленное. Я считаю, что моё предложение соответствует этим качествам.

В данном случае речь идет о мета-задаче для реализации конкретной общей цели, которая поделена на 3 подзадачи. 1 (одну) из них вы лично считаете нереализуемой, поскольку не знаете как это сделать или просто не хотите связываться с установкой, настройкой и тестированием специфического вспомогательного софта. Понятно… Но это абсолютно не значит, что задачу невозможно реализовать в принципе или что она некачественная сама по себе! Именно поэтому я считаю ваш предлог надуманным, даже эгоцентричным, если хотите.

Кроме того, это всего лишь одна из 3-х подзадач, не отменяющая полезности всех остальных. Во-вторых, кто сказал, что все это должны реализовывать только вы один? В этом и есть смысл коммьюнити – с миру по нитке… Кто-то анализирует, кто-то предлагает, кто-то формализует, кто-то критикует, кто-то кодирует, кто-то тестирует и т.п. – в итоге все пользуются и все довольны.

“Реализация” состоит из всего вышеперечисленного и не надо всегда все взваливать на себя одного. Никто тут никому ничего не указывает, только предлагает, и не вам лично, а всему сообществу! Если же вас смутил мой императив в заголовке задачи на гитхабе – так это так принято в формальной документации, никаких личных “указаний” там нет и быть не может!

1 лайк

Я не согласен с (б). Ваше предложение неконструктивное. Можно понасовать много таких предложений:

  • А давайте новую операционку сделаем, под которой начинающим было легко программировать
  • А давайте полностью оболочку PascalABC.NET перепишем.

И прочая.

Всё это - неконструктивные предложения - и они будут отвергаться что называется - с порога.

Про специфичный и вспомогательный софт. Предлагайте на специфичных форумах. Обсуждайте. Там. В частности, где на специфичный софт получить деньги, гранты, людей для исполнения. Но - не здесь. Здесь посторониние темы будут - ещё раз повторю - удаляться с порога.