Добрый день, только приступаю к знакомству с версией “ABC”, лет 15 назад пользовался “Turbo”, но уже почти все забыл, а что помню не очень подходит к современным реалиям, потому возникает куча вопросов:
Файл справки слабоват, в большинстве своем указаны краткие сведения, без уточнений и примеров, понимаю, что “много хочу”, но в результате сходу использовать прочитанное не получается. Например, захотелось мне узнать, есть ли в массиве определенный байт, или нет. Вспомнил, что встречал о похожую функцию в описании String, но вовремя вспомнил, что все элементы текста теперь 2 байта. Нашел схожую функцию в массивах - “IndexOf”, но не совсем понятна запись: “IndexOf”.
Попробовал так: Position:=IndexOf(MyBytes,NewByte); - компилятор не знает такого слова!
Пробовал использовать IndexOfByte вместо IndexOf - тот же результат.
Второй момент - в TurboPascal для работы с файлами были процедуры BlockRead и BlockWrite с произвольным размером (в пределах “сегмента”). Здесь вроде как можно считывать только жестко установленное кол-во байт, равное длине переменной. Но и это мне не очень подходит, т.к. при попытке считать переменную, например типа integer из файла, где осталось только 3 байта, немедленно проиозойдет ошибка. Перехватить ошибку можно, но как узнать, что считалось только 3 байта? Ведь ошибка могла возникнуть по разной причине, например испорченный сектор, а не только окончание файла, которое можно учесть, получив длиину файла при открытии!
Еще интересно: в описании типа данных “char” приведены функции chr(), char() и chrunicode(). Для наглядности сделал вывод на экран всех трех функций с одинаковым значением в цикле. Странное дело: на одном компьютере все 3 символа выглядели одинаково, а на другом значение char() отличалось в диапазоне 128…159, хотя на обоих компьютерах одинаковая Win8rus64, и локализация форматов Россия. Совершенно случайно наткнулся на функцию chrAnsi(), вот она отличается от прочих, как и положено.