[{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-47 мин."},"isBanned":false,"roleString":"Мастер-Эксперт","roleIcon":"fa-user-ninja","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"Facta loquuntur.","signatureHTML":"Facta loquuntur.","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.979,"absoluteRating":109927,"dynamicRating":1674.561,"dynamicRatingStars":10,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-05-08T00:47:55.0307884+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":11,"counters":{"daysAtPortal":6564,"questions":12,"questionsPosts":18345,"questionsAnswers":6663,"questionsPostsEvaluations":2831,"forumPosts":5698},"isRfproUserClass":true,"id":17387,"name":"Гордиенко Андрей Владимирович","email":"","role":10,"registDate":"1000-01-01T00:00:00","lastDate":"2024-05-06T05:00:12","photo":"users/17387/f4979bc95a484b9f43f75cfe66538acd.jpg","lastDateIndicatorClass":"red","lastDateIndicatorText":"давно","photoPreview200":"users/17387/200_f4979bc95a484b9f43f75cfe66538acd.jpg","photoPreview120":"users/17387/120_f4979bc95a484b9f43f75cfe66538acd.jpg","photoPreview100":"users/17387/100_f4979bc95a484b9f43f75cfe66538acd.jpg","photoPreview80":"users/17387/80_f4979bc95a484b9f43f75cfe66538acd.jpg","photoPreview40":"users/17387/40_f4979bc95a484b9f43f75cfe66538acd.jpg","isPhotoExists":true,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":true},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-47 мин."},"isBanned":false,"roleString":"Мастер-Эксперт","roleIcon":"fa-user-ninja","socialMedia":[],"aboutText":"Я пенсионер. Образование высш, радио-инж. Работал инж-электроником, ведущим средств телевидения, связи, слесарем и инженером КИП, грузчиком, программистом. На моём счету десятки рац-предложений, в тч с большим экономич эффектом.\nЯ люблю компьютеры, ремонтирую их друзьям и соседям. Пишу полезные программки в vbs-файлах, автоматизирующие настройку Win-систем, приложений и работу с ними.","aboutHTML":"Я пенсионер. Образование высш, радио-инж. Работал инж-электроником, ведущим средств телевидения, связи, слесарем и инженером КИП, грузчиком, программистом. На моём счету десятки рац-предложений, в тч с большим экономич эффектом.\u003Cbr\u003EЯ люблю компьютеры, ремонтирую их друзьям и соседям. Пишу полезные программки в vbs-файлах, автоматизирующие настройку Win-систем, приложений и работу с ними.","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.935,"absoluteRating":25753,"dynamicRating":460.127,"dynamicRatingStars":8,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-05-08T00:47:55.0309901+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":11,"counters":{"daysAtPortal":5597,"questions":25,"questionsPosts":7459,"questionsAnswers":1225,"questionsPostsEvaluations":788,"forumPosts":399},"isRfproUserClass":true,"id":259041,"name":"Алексеев Владимир Николаевич","email":"","role":10,"registDate":"1000-01-01T00:00:00","lastDate":"2024-01-30T15:24:45","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":true},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-47 мин."},"isBanned":false,"roleString":"Старший Модератор","roleIcon":"fa-user-tie","socialMedia":[],"aboutText":"634034, г.Томск, ул.Красноармейская 122, кв.173","aboutHTML":"634034, г.Томск, ул.Красноармейская 122, кв.173","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.985,"absoluteRating":21746,"dynamicRating":411.743,"dynamicRatingStars":8,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-05-08T00:47:55.031099+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":13,"counters":{"daysAtPortal":5281,"questions":1,"questionsPosts":1973,"questionsAnswers":1283,"questionsPostsEvaluations":588,"forumPosts":91},"isRfproUserClass":true,"id":312929,"name":"Коцюрбенко Алексей Владимирович","email":"","role":12,"registDate":"1000-01-01T00:00:00","lastDate":"2023-11-05T17:20:40","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":true},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-47 мин."},"isBanned":false,"roleString":"Советник","roleIcon":"fa-user-ninja","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":5,"absoluteRating":9460,"dynamicRating":385.412,"dynamicRatingStars":8,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-05-08T00:47:55.0311633+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":10,"counters":{"daysAtPortal":2454,"questions":0,"questionsPosts":472,"questionsAnswers":398,"questionsPostsEvaluations":298,"forumPosts":1},"isRfproUserClass":true,"id":401284,"name":"Михаил Александров","email":"","role":9,"registDate":"1000-01-01T00:00:00","lastDate":"2024-04-21T19:50:04","photo":"users/401284/48171011af39b6bb3a74df8c0fcf97d0.jpg","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"users/401284/200_48171011af39b6bb3a74df8c0fcf97d0.jpg","photoPreview120":"users/401284/120_48171011af39b6bb3a74df8c0fcf97d0.jpg","photoPreview100":"users/401284/100_48171011af39b6bb3a74df8c0fcf97d0.jpg","photoPreview80":"users/401284/80_48171011af39b6bb3a74df8c0fcf97d0.jpg","photoPreview40":"users/401284/40_48171011af39b6bb3a74df8c0fcf97d0.jpg","isPhotoExists":true,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":true},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-47 мин."},"isBanned":false,"roleString":"Посетитель","roleIcon":"fa-user","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.987,"absoluteRating":6052,"dynamicRating":221.444,"dynamicRatingStars":7,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-05-08T00:47:55.0312588+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":2,"counters":{"daysAtPortal":2733,"questions":0,"questionsPosts":527,"questionsAnswers":250,"questionsPostsEvaluations":155,"forumPosts":0},"isRfproUserClass":true,"id":400669,"name":"epimkin","email":"","role":1,"registDate":"1000-01-01T00:00:00","lastDate":"2024-02-19T23:46:05","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":false},{"isEmailConfirmed":true,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":3,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"нет адреса","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-47 мин."},"isBanned":false,"roleString":"Посетитель","roleIcon":"fa-user","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"[i]С уважением[/i]\n[i]shvetski[/i]","signatureHTML":"\u003Ci\u003EС уважением\u003C/i\u003E\u003Cbr\u003E\u003Ci\u003Eshvetski\u003C/i\u003E","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":4.963,"absoluteRating":11493,"dynamicRating":200.809,"dynamicRatingStars":7,"timezone":{"id":0,"baseUtcOffset":"00:00:00","displayName":"[не установлен]","linuxid":"notset/clean"},"currentDateTime":"2024-05-08T00:47:55.0314084+03:00","isValid":true,"isUnconfirmed":false,"isConfirmed":true,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":2,"counters":{"daysAtPortal":5723,"questions":35,"questionsPosts":1567,"questionsAnswers":588,"questionsPostsEvaluations":324,"forumPosts":44},"isRfproUserClass":true,"id":226425,"name":"Shvetski","email":"","role":1,"registDate":"1000-01-01T00:00:00","lastDate":"2024-05-07T11:57:07","photo":"users/226425/f345a2332af0cff5fba81b60c4e0d441.jpg","lastDateIndicatorClass":"red","lastDateIndicatorText":"давно","photoPreview200":"users/226425/200_f345a2332af0cff5fba81b60c4e0d441.jpg","photoPreview120":"users/226425/120_f345a2332af0cff5fba81b60c4e0d441.jpg","photoPreview100":"users/226425/100_f345a2332af0cff5fba81b60c4e0d441.jpg","photoPreview80":"users/226425/80_f345a2332af0cff5fba81b60c4e0d441.jpg","photoPreview40":"users/226425/40_f345a2332af0cff5fba81b60c4e0d441.jpg","isPhotoExists":true,"isLoggedIn":true,"isNewUser":false,"isExisted":true,"isExpert":false}]
Здравствуйте уважаемы эксперты! Прошу помощи в решение такой задачки:
Сформировать файл со строками, состоящими из ИМЯ, ОТЧЕСТВО, ФАМИЛИЯ. Создать этот файл самому и заполнить его данными по своей группе. Организовать вывод на экран всех полных имён людей, имеющих задаваемое с клавиатуры имя.
Прошу написать все с комментариями чтоб понятно было) Программа Tasm.
Обсуждение
Неизвестный
27.05.2010, 16:57
общий
Петров Юрий Иванович: Уточните, пожалуйста, что значит ? Файл должен быть создан заранее, требуемая программа его только читает? Или же что и создаваться этот файл должен этой же программой?
Неизвестный
27.05.2010, 23:04
общий
это ответ
Здравствуйте, Петров Юрий Иванович.
Программа приведена в приложении. Файл с данными должен быть создан предварительно. Если необходимо, то можно добавить и создание файла. Компилировать в COM-файл.
Пример данных:
Код:
Иван Петрович Сидоров неверная строка Николай Сергеевич, Смирнов... Иван Андреевич Лисов Петр Николаевич Иванов
Строка "неверная строка" будет пропущена при разборе файла (меньше 3-х слов). Если в строке больше 3-х слов, то разбор файла прекращается. Максимальный размер файла - 40К (программа проверяет, но я эту часть не тестировал).
С вопросами обращайтесь в мини-форум.
Успехов!
Приложение: ; Программа читает файл со строками, состоящими из ИМЯ, ОТЧЕСТВО, ФАМИЛИЯ. ; Организовать вывод на экран всех полных имён людей, имеющих задаваемое ; с клавиатуры имя.
locals @@ model tiny
t_person struc pName dw ? ; адрес имени pPatronymic dw ? ; адрес отчества pSurname dw ? ; адрес фамилии t_person ends
MAX_ENTRIES = 100 ; максимальное кол-во записей
.data
strMenu db 13,10,'-----------------',13,10 db '1- загрузить файл',13,10 db '2- показать файл',13,10 db '3- поиск по имени',13,10 db '-----------------',13,10 db 'Esc - выход',13,10 db '-----------------' strEol db 13,10,'$'
msgEnterName db 13,10,'Введите имя файла: $' msgOpenError db 13,10,'Ошибка при открытии файла.',13,10,'$' msgFileTooBig db 13,10,'Файл слишком большой, читаем только первые 40 Кбайт.',13,10,'$' msgReadError db 13,10,'Ошибка при чтении файла.',13,10,'$' msgLimit db 13,10,'Слишком много записей.',13,10,'$' msgWrongFormat db 13,10,'Неверный формат файла. Разбор файла прерван.',13,10,'$' msgUnexpectedEnd db 13,10,'Неожиданный конец файла.',13,10,'$' msgNoData db 13,10,'Нет данных.',13,10,'$' msgSearchName db 13,10,'Поиск - введите имя: $' msgNotFound db 13,10,'Имя не найдено.',13,10,'$' strTableHead db 13,10 db '-----------------------------------------------------',13,10 db 'Фамилия Имя Отчество',13,10 strTableLine db '-----------------------------------------------------',13,10,'$'
db 13,10 delimiters db 9, ' .,;:!?$' ; массив разделителей слов LEN_DELIM equ $-delimiters ; кол-во разделителей
bufInput db 254 ; размер буфера lenInput db 0 ; длина введенной строки szInput db 254 dup(0) ; сюда будет помещена введенная строка
bufFileName db 254 ; размер буфера lenFileName db 0 ; длина введенной строки szFileName db 254 dup(0) ; сюда будет помещено имя файла при вводе
; таблица указателей на функции proc_table dw load_file, type_file, search
nPersons dw 0 ; кол-во записей в файле screen_row db 0 bFound db 0
; для уменьшения размера файла не объявляем явно массив с указателями ; и буфер для данных, а используем метку конца данных (persons) и ; вычисляем адрес буфера
; организация памяти ; -----0 ; PSP ; -----256 (100h) ; код программы ; данные ; ----- конец загруженной программы ; метка persons ; MAX_ENTRIES*(SIZE t_person) - массив структур с указателями ; буфер для данных (40 Кбайт) ; ----- ; Стек ; -----64К
.code org 100h start: cld ; направление для строковых команд ; выводим меню mov ah,9 ; вывод строки на экран mov dx,offset strMenu ; смещение выводимой строки int 21h ; выбор из меню @@wait_key: xor ax,ax ; ожидаем нажатия клавиши int 16h ; проверяем нажатую клавишу cmp al,27 ; ESC - выход je @@exit cmp al,'1' jb @@wait_key cmp al,'3' ja @@wait_key ; введенное число - индекс в массиве указателей на процедуры, ; соответствующие пунктам меню and ax,000Fh ; символ преобразуем в число с одновременным обнулением AH dec ax ; индексация с 0 shl ax,1 ; массив слов, поэтому индекс умножаем на 2 mov bx,ax ; для получения смещения в таблице call [proc_table][bx] jmp start @@exit: int 20h ; выход из программы (только .COM)
;------------------------------------------------------------------------- ; запрос имени файла, загрузка в память и формирование массива указателей ;------------------------------------------------------------------------- load_file proc mov ah,9 ; выводим предложение ввести имя файла mov dx,offset msgEnterName ; смещение выводимой строки int 21h
mov ah,0Ah ; ввод строки с клавиатуры mov dx,offset bufFileName ; смещение буфера int 21h
; преобразуем имя файла в ASCIIZ строку (с конечным нулем) xor bh,bh mov bl,[lenFileName] mov [szFileName][bx],0
; открываем файл mov ax,3D00h ; открытие файла (AH=3Dh) с доступом по чтению (AL=0) mov dx,offset szFileName ; DS:DX - адрес имени файла int 21h jnc @@open_ok
; AX содержит код ошибки, для простоты его игнорируем ; В серьезной программе надо выводить осмысленное сообщение ; в соответствии с кодом.
mov ah,9 ; сообщение об ошибке создания mov dx,offset msgOpenError int 21h ret
@@open_ok: ; Читаем файл в память. ; Сначала определяем размер mov bx,ax ; handle mov ax,4202h ; AL=2 - позиция задается относительно конца файла xor cx,cx ; CX:DX - позиция xor dx,dx int 21h ; DX:AX - текущая позиция = размер файла test dx,dx ; проверим размер jnz @@too_big cmp ax,40*1024 ; максимум 40K jbe @@size_ok
@@too_big: ; слишком большой файл mov ah,9 ; выводим сообщение mov dx,offset msgFileTooBig int 21h mov ax,40*1024 ; максимум 40K
@@size_ok: push ax ; сохраняем размер
; возвращаем указатель текущей позиции на начало файла mov ax,4200h ; AL=0 - позиция задается относительно начала файла xor cx,cx ; CX:DX - позиция xor dx,dx int 21h
pop cx ; CX - сколько читать mov ah,3Fh ; ф-я чтения файла, BX = handle mov dx,offset file_buffer ; смещение буфера (после всех данных) int 21h jnc @@read_ok
; AX содержит код ошибки, для простоты его игнорируем mov ah,9 ; выводим сообщение об ошибке чтения mov dx,offset msgReadError int 21h mov ah,3Eh ; закрываем файл int 21h ret
@@read_ok: mov cx,ax ; сколько реально прочитано
mov ah,3Eh ; закрываем файл int 21h
mov [nPersons],0 jcxz @@ret
mov bx,offset persons mov si,dx ; начало буфера @@next_line: call skip_all_delimiters ; пропускаем разделители, включая концы строк jcxz @@ret cmp bx,offset persons + MAX_ENTRIES*(SIZE t_person) ; проверяем на переполнение jb @@ok mov dx,offset msgLimit ; слишком много записей jmp short @@msg @@ok: ; (SI-1) - адрес первого символа следующего слова lea ax,[si-1] ; AX = адрес первого символа имени mov [bx],ax ; сохраняем адрес имени call read_word ; пропускаем имя jcxz @@unexpected_end jz @@end_of_line ; неполная строка, пропускаем mov byte ptr [si],'$'
call skip_delimiters ; пропускаем разделители jcxz @@unexpected_end jz @@end_of_line ; неполная строка, пропускаем ; (SI-1) - адрес первого символа следующего слова lea ax,[si-1] ; AX = адрес первого символа отчества mov [bx+2],ax ; сохраняем адрес отчества call read_word ; пропускаем отчество jcxz @@unexpected_end jz @@end_of_line ; неполная строка, пропускаем mov byte ptr [si],'$'
call skip_delimiters ; пропускаем разделители jcxz @@unexpected_end jz @@end_of_line ; неполная строка, пропускаем ; (SI-1) - адрес первого символа следующего слова lea ax,[si-1] ; AX = адрес первого символа фамилии mov [bx+4],ax ; сохраняем адрес фамилии call read_word ; пропускаем фамилию mov byte ptr [si],'$' jz @@eol ; нормально, конец строки сразу после фамилии jcxz @@eol ; нормально, конец файла сразу после фамилии
; разделитель, но не конец строки ; до конца строки допустимы только разделители (строго говоря, только пробелы) call skip_delimiters ; пропускаем разделители jz @@eol ; неверный формат файла - лишние символы после фамилии ; эта строка предполагается неверной, дальнейший анализ прекращается mov dx,offset msgWrongFormat @@msg: mov ah,9 int 21h ret
@@eol: add bx,SIZE t_person ; продвигаем указатель в массиве записей inc [nPersons] ; увеличиваем счетчик записей @@end_of_line: test cx,cx ; здесь нельзя использовать loop, поскольку CX jnz @@next_line ; может быть равно 0. Кроме того, здесь нельзя уменьшать CX. ; дошли до конца прочитанного блока @@ret: ret
@@unexpected_end: ; Неожиданный конец прочитанного блока - в середине записи. ; Это возможно при ошибке или если файл был прочитан не полностью mov dx,offset msgUnexpectedEnd jmp short @@msg load_file endp
;-------------------------------------------------------------- ; пропуск разделителей ; вход: ; SI - указатель на строку ; CX - длина строки ; выход: ; (SI-1) - адрес первого символа следующего слова ; CX - длина остатка строки ;-------------------------------------------------------------- skip_delimiters proc @@next: push cx ; длина остатка строки lodsb ; очередной символ строки mov cx,LEN_DELIM mov di,offset delimiters repne scasb ; сравниваем с возможными разделителями pop cx loope @@next ; цикл, пока разделитель и строка не кончилась cmp al,13 ; конец строки в стиле DOS - пара 13,10 (CR/LF) je @@ret cmp al,10 ; конец строки в стиле UNIX - LF @@ret: ret skip_delimiters endp
;-------------------------------------------------------------- ; пропуск разделителей, включая CR/LF ; параметры - аналогично skip_delimiters ;-------------------------------------------------------------- skip_all_delimiters proc @@next: push cx ; длина остатка строки lodsb ; очередной символ строки mov cx,LEN_DELIM+2 mov di,offset delimiters-2 repne scasb ; сравниваем с возможными разделителями, включая CR/LF pop cx loope @@next ; цикл, пока разделитель и строка не кончилась ret skip_all_delimiters endp
;-------------------------------------------------------------- ; пропуск слова ; вход: ; SI - указатель на первый символ слова + 1 ; (к этому моменту первый символ слова уже проверен) ; CX - длина строки ; выход: ; SI - указывает на первый символ за концом слова ; CX - длина остатка строки ; ZF (флаг нуля)=1 - конец строки ;-------------------------------------------------------------- read_word proc @@next: push cx ; длина остатка строки lodsb ; очередной символ строки mov cx,LEN_DELIM+2 mov di,offset delimiters-2 repne scasb ; сравниваем с возможными разделителями, включая CR/LF pop cx loopne @@next ; цикл, пока НЕ разделитель и строка не кончилась jne @@ret ; эта проверка важна для последнего введенного слова dec si ; теперь SI указывает на первый символ за концом слова inc cx cmp al,13 ; конец строки в стиле DOS - пара 13,10 (CR/LF) je @@ret cmp al,10 ; конец строки в стиле UNIX - LF @@ret: ret read_word endp
;-------------------------------------------------------------- ; Вывод на экран всех записей в табличном виде ;-------------------------------------------------------------- type_file proc mov cx,[nPersons] jcxz _no_data mov ah,9 ; вывод заголовка таблицы mov dx,offset strTableHead int 21h
_bottom_line: mov ah,9 ; нижняя черта mov dx,offset strTableLine int 21h ret
_no_data: mov ah,9 ; сообщение "нет данных" mov dx,offset msgNoData int 21h ret type_file endp
;-------------------------------------------------------------- ; Запрос имени и поиск ; Замечание: если пользователь введет что-то вроде ; Иван$Петрович ; и в файле с данными 'Иван' и 'Петрович' разделены ; одним символом (например, 'Иван Петрович Сидоров'), ; то будет найдена эта запись ;-------------------------------------------------------------- search proc mov cx,[nPersons] jcxz _no_data
mov ah,9 ; выводим предложение ввести имя для поиска mov dx,offset msgSearchName ; смещение выводимой строки int 21h
mov ah,0Ah ; ввод строки с клавиатуры mov dx,offset bufInput ; смещение буфера int 21h
xor bh,bh mov bl,[lenInput] ; BX= длина введенной строки mov [bFound],bh ; пока ничего не найдено mov bp,bx mov [szInput][bx],'$' ; записываем терминатор
mov bx,offset persons ; адрес массива указателей
@@next: push cx mov si,offset szInput mov di,[bx].pName mov cx,bp repe cmpsb jne @@skip cmp [bFound],cl ; здесь CL=0 jnz @@lin mov [bFound],1 ; что-то нашли mov ah,9 ; вывод заголовка таблицы mov dx,offset strTableHead int 21h @@lin: mov si,bx call type_line mov bx,si @@skip: add bx,SIZE t_person ; к следующей записи pop cx loop @@next
cmp [bFound],cl ; здесь CL=0 jne _bottom_line ; что-то было найдено, отчеркиваем таблицу
@@not_found: mov ah,9 ; ничего не найдено mov dx,offset msgNotFound int 21h ret search endp
;-------------------------------------------------------------- ; вывод одной строки на экран в таблицу ; SI - адрес структуры в массиве persons ; Сохраняет значение CX,SI ;-------------------------------------------------------------- type_line proc push cx mov ah,3 ; запрос позиции и размера курсора xor bh,bh ; видеостраница int 10h ; Выход: DH - строка, DL - колонка mov [screen_row],dh
mov ah,9 mov dx,[si].pSurname ; фамилия int 21h
mov ah,2 ; установить позицию курсора mov dh,[screen_row] mov dl,15 ; позиция имени int 10h
mov ah,9 mov dx,[si].pName ; имя int 21h
mov ah,2 ; установить позицию курсора mov dh,[screen_row] mov dl,30 ; позиция отчества int 10h
mov ah,9 mov dx,[si].pPatronymic ; отчество int 21h
mov dx,offset strEol ; на новую строку int 21h pop cx ret type_line endp
end start
Неизвестный
28.05.2010, 13:30
общий
Замечание по программе:
В текущей версии поиск считается успешным, если начало имени совпало с введенной строкой. Для сравнения по полному имени надо учесть в длине искомой строки терминатор, например, так:
Код:
388: mov bp,bx 389: mov [szInput][bx],'$' ; записываем терминатор inc bp ; учитываем терминатор в длине строки mov bx,offset persons ; адрес массива указателей
388 и 389 - не метки, а номера строк исходного файла
Форма ответа
Отправка постов/ответов доступна только зарегистрированным и подтвержденным пользователям.
{"canUserNotesAccess":false,"canUserAdminsNotesAccess":false,"canAskQuestion":false,"canEditQuestions":false,"canSeeQuestionsComplains":false,"isSuperAdmin":false,"isAdmin":false,"isModer":false,"canCreateNewUser":false,"canConfirmUser":false,"canEditUserName":false,"canEditUserRole":false,"canEditUserEmail":false,"canEditUserPhone":false,"canEditUserBirthdate":false,"canEditUserCountry":false,"canEditSocialMedia":false,"canDeleteUserPhoto":false,"canDeleteUser":false,"canEditUserAbout":false,"canBanUser":false,"canResetUserPassword":false,"canEditRegistDate":false,"canChangeUserRating":false,"canAccessToAdmin":false,"canAnnouncements":false,"canManageQuestionPosts":false,"canManageForumSections":false,"canManageForumThreads":false,"canManageForumPosts":false,"canCreateForumThreads":false,"canSeeUserEmail":false,"canSeeUserPhone":false,"canSeeIPAddress":false,"canSeeUserRegistDate":false,"canSeeUserSocialMedia":false,"canSeeBirthDate":false,"canSeeUserCountry":false,"canSeeUserSettings":false,"canSeeDeletedPosts":false,"isEmailConfirmed":false,"tel":"","ip":"0.0.0.0","ipLocation":{"ip":"","sDate":0,"postalCode":"","country":"","countryIsoCode":"","federalDistrict":"","region":"","regionType":"","city":"","cityType":"","geoLat":"","geoLon":"","locationString":""},"birthDate":"0001-01-01T00:00:00","age":0,"isBirthdayToday":false,"ban":{"id":0,"userId":0,"isBanned":false,"startDate":"0001-01-01T00:00:00","endDate":"0001-01-01T00:00:00","moder":{"id":0,"name":"Неизвестный","email":"","role":0,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isValid":false,"isLoggedIn":false,"isUnconfirmed":true,"isConfirmed":false,"isNewUser":false,"isExisted":false,"isExpert":false,"isRfproUserClass":false},"reasonHTML":"","timeToUnbanString":"-47 мин."},"isBanned":false,"roleString":"Неподтвержден","roleIcon":"fa-user-clock","socialMedia":[],"aboutText":"","aboutHTML":"","signatureText":"","signatureHTML":"","country":{"id":0,"name":"","isFlagExists":false,"flagImage":"","isValid":false},"city":{"id":0,"name":"","countryId":0,"yandexCityId":0,"isValid":false},"averageEvaluation":0,"absoluteRating":0,"dynamicRating":0,"dynamicRatingStars":0,"timezone":{"id":283,"baseUtcOffset":"03:00:00","displayName":"(UTC\u002B03:00) Москва","linuxid":"Europe/Moscow"},"currentDateTime":"2024-05-08T03:47:55.0319987+03:00","isValid":false,"isUnconfirmed":true,"isConfirmed":false,"settings":{"fixedHeader":true,"fixedFooter":true,"leftColumnMode":2,"darkTheme":false,"topPanelBtns":[{"id":103,"text":"Главная","title":"Главная (начальная) страница Портала","icon":"fa-solid fa-house-chimney","colorClass":"text-info-emphasis","controller":"Home","action":"Index","accessLevel":0,"isDropdown":false},{"id":100,"text":"Вход в систему","title":"Войти в систему с использованием своих регистрационных данных (адрес электронной почты и пароль)","icon":"fa-solid fa-arrow-right-to-bracket","colorClass":"text-info-emphasis","controller":"Login","action":"Index","accessLevel":0,"isDropdown":false},{"id":101,"text":"Регистрация","title":"Зарегистрироваться в системе и стать полноценным участником сообщества","icon":"fa-solid fa-user-plus","colorClass":"text-info-emphasis","controller":"Regist","action":"Index","accessLevel":0,"isDropdown":false},{"id":102,"text":"Сброс пароля","title":"Сбросить пароль свой учетной записи, если Вы его забыли","icon":"fa-solid fa-key","colorClass":"text-danger-emphasis","controller":"Login","action":"ResetPassword","accessLevel":0,"isDropdown":false}],"topPanelBtnsHideText":false},"isLevelUpAllowed":false,"nextRole":1,"counters":{"daysAtPortal":0,"questions":0,"questionsPosts":0,"questionsAnswers":0,"questionsPostsEvaluations":0,"forumPosts":0},"isRfproUserClass":true,"id":0,"name":"Неизвестный","email":"","role":0,"registDate":"0001-01-01T00:00:00","lastDate":"0001-01-01T00:00:00","photo":"images/unophoto.png?v=9.4.12","lastDateIndicatorClass":"gray","lastDateIndicatorText":"давно","photoPreview200":"images/unophoto.png?v=9.4.12","photoPreview120":"images/unophoto.png?v=9.4.12","photoPreview100":"images/unophoto.png?v=9.4.12","photoPreview80":"images/unophoto.png?v=9.4.12","photoPreview40":"images/unophoto.png?v=9.4.12","isPhotoExists":false,"isLoggedIn":false,"isNewUser":false,"isExisted":false,"isExpert":false}