Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 04.07.2019
Сообщений: 38

Не считываются русские строки из файла

14.07.2019, 20:16. Показов 5884. Ответов 68
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не считываются русские строки из файла выбранного в списке TComboBox, директорию с файлами открывает и имена файлов считываются в TComboBoх, но если выбрать - ошибка открытия файла.

Помогите победить проблему. Спасибо.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 
  WIN32_FIND_DATAA fd; //Данные о файле.
 
    HANDLE hFind =:: FindFirstFileA("Списки\\*.*", &fd); //Указатель для перебора.
    if(hFind != INVALID_HANDLE_VALUE)  //Перебираем файлы папки со списками.
    {
        do
        {
            if(fd.cFileName[0] != '.')  //Выводим имена списков.
                CmbList->Items->Add(fd.cFileName);
        }
        while(::FindNextFileA(hFind, &fd));
        ::FindClose(hFind);
    }
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::CmbListChange(TObject *Sender)  //Выбирает список.
{
   if(CmbList->ItemIndex < 0)
       return;
         //Список не выбран.
 
   wifstream wcin(("Списки" + CmbList->Text).w_str()); //Файл списка.
   if(!wcin.is_open())
   {
    MessageBox(NULL, L"Ошибка, список не загружен!", L"Загрузка списка", MB_OK);
    return;
         //Список не выбран.return;  //Не удалось открыть файл.
    }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.07.2019, 20:16
Ответы с готовыми решениями:

Неправильно считываются русские символы из консоли
упорно не хочет читать русские символы из консоли :( выводятся нормально, а считывает введенные не правильно ! setlocale(LC_ALL,...

Считывание строки из файла в динамическую память - считываются лишние символы
Здравствуйте. Мне нужно считать текст из файла в строку в динамической памяти. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; ...

Напишите программу, где данные считываются из файла и результат выводится из файла.
Напишите программу, где данные считываются из файла и результат выводится из файла. Найти произведение трех матриц размерностью 3×3.

68
Модератор
 Аватар для D1973
9902 / 6440 / 2454
Регистрация: 21.01.2014
Сообщений: 27,335
Записей в блоге: 3
19.07.2019, 10:31
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Vasily Tyorkin Посмотреть сообщение
Каким образом они создаются
Обычные текстовые файлы, создаются простым блокнотом, только расширение .txt не добавлено...
Цитата Сообщение от Vasily Tyorkin Посмотреть сообщение
как сделать чтобы расширения не было видно в игре
Сделать-то запросто... В конструкторе формы, где идет загрузка данных в КомбоБокс измените цикл на следующий...
C++
1
2
for(int i = 0; i < A.Length; i++)
  cb_Themes->Items->Add(TPath::GetFileNameWithoutExtension(A[i]));
Вот только грибы у Вас тогда 2 раза в список попадут, т.к. в каталоге есть файл "грибы", а есть файл "грибы.txt"... Какой либо надо удалить, какой именно - не важно, т.к. в списке будет отображаться только имя файла, без пути и без расширения.
И да, я забыл одну опцию отключить при компиляции, попробуйте еще разок:
Вложения
Тип файла: rar Release.rar (894.1 Кб, 1 просмотров)
1
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
19.07.2019, 10:31
Цитата Сообщение от Vasily Tyorkin Посмотреть сообщение
как сделать чтобы расширения не было видно в игре .txt
C++
1
ChangeFileExt(/*имя файла*/, L"");
Только если ты будешь сохранять в ListBox имена без расширения, тебе где-то нужно запоминать полное имя, чтобы открывать выбранный файл. Это если расширения могут быть разными, если всегда *.txt, конечно, ничего запоминать не нужно.
Но вообще непонятно, зачем ты хочешь сохранять файлы с расширением *.txt, если они не предназначены для просмотра пользователем непосредственно как текстовые файлы.
Цитата Сообщение от Vasily Tyorkin Посмотреть сообщение
Не, наверно, не судьба
Ну поставь уже точку останова и найди конкретную строчку, на которой выходит AV.
1
Модератор
 Аватар для D1973
9902 / 6440 / 2454
Регистрация: 21.01.2014
Сообщений: 27,335
Записей в блоге: 3
19.07.2019, 10:59
Lelik-pahan, да что-то не отлавливается дебагером это AV...
0
0 / 0 / 0
Регистрация: 04.07.2019
Сообщений: 38
19.07.2019, 11:07  [ТС]
Нашел как создать файл, один из вариков, с помощью Notepad++. Lelik-pahan, Спасибо. Тоже пригодиться!
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
19.07.2019, 12:40
Цитата Сообщение от D1973 Посмотреть сообщение
Lelik-pahan, да что-то не отлавливается дебагером это AV...
Как я понял, он у вас и не выходит. А у ТС стабильно воспроизводится, он мог бы пройти по шагам и найти проблемное место. Там уже проще будет понять причину.

Добавлено через 1 час 4 минуты

Не по теме:

Кстати, у формы свойство Position следует устанавливать в poScreenCenter, а не poDesktopCenter. Иначе на ПК с двумя мониторами программа появляется посередине двух мониторов - половина окна на левом, половина на правом.

1
0 / 0 / 0
Регистрация: 04.07.2019
Сообщений: 38
19.07.2019, 13:09  [ТС]
Lelik-pahan, ПРоходил дебагером, после выполнения функции очистки... она(AV) и вылезает, может еще куда-нибудь посмотреть? Или как-то дебагер поднастроить?

Добавлено через 14 минут
D1973,
Цитата Сообщение от D1973 Посмотреть сообщение
И да, я забыл одну опцию отключить при компиляции, попробуйте еще разок:
Сейчас пошло, ошибки нет, как бы все пристойно, что же у мну не идет?

Обнаружил маленкий недочетик, в начале игры кнопка начать сначала не активна, это понятно. После месседжа о победе, все очищается, но кнопка так и остаётся активной и если ее нажать... естественно появляется окошко с ошибкой. Где добавить, что-бы кнопка становилась перед началом следующей игры снова неактивной?

Еща раз спасибо, мужики, что возюкаетесь со мной, честно не ожидал, спасибище огромное!!!
0
Модератор
 Аватар для D1973
9902 / 6440 / 2454
Регистрация: 21.01.2014
Сообщений: 27,335
Записей в блоге: 3
19.07.2019, 14:38
Цитата Сообщение от Vasily Tyorkin Посмотреть сообщение
что-бы кнопка становилась перед началом следующей игры снова неактивной?
Вообще-то, так и было задумано... Но вот если отключить после победы очистку - оно и не срабатывает... Надо попробовать вообще переделать, без этих структур и векторов...
0
Модератор
 Аватар для D1973
9902 / 6440 / 2454
Регистрация: 21.01.2014
Сообщений: 27,335
Записей в блоге: 3
19.07.2019, 20:04
Лучший ответ Сообщение было отмечено Vasily Tyorkin как решение

Решение

Vasily Tyorkin, попробуйте ка вот этот вариант реализации (архив v3.rar). Если и этот будет капризничать - ну не знаю прямо... Но на всякий случай готовое приложение тоже приложу (архив release.rar)
Вложения
Тип файла: rar v3.rar (9.0 Кб, 2 просмотров)
Тип файла: rar Release.rar (73.3 Кб, 0 просмотров)
1
19.07.2019, 20:07

Не по теме:

Цитата Сообщение от Lelik-pahan Посмотреть сообщение
Иначе на ПК с двумя мониторами программа появляется посередине двух мониторов
Интересно... Просто никогда с двумя мониторами на одном компе дела иметь не приходилось... Знаю, конечно, что можно - но вот не довелось как-то... Один монитор на 2 компа - это сколько угодно :-)

0
0 / 0 / 0
Регистрация: 04.07.2019
Сообщений: 38
20.07.2019, 03:36  [ТС]
Спасибо, все работает, без ошибок!!!

Может весь косяк из-за версии win32, или я не так понял, сейчас версия win64?

Добавлено через 2 часа 47 минут
Я понимаю, что уже задолбал, но мне для курсовой нужно въехать в код рассказать и описать алгоритм работы, если не трудно помогите разобраться, детально, как работает функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall Tfrm_Main::LetterClick(TObject *Sender)
{
   TBitBtn *bbCurr = dynamic_cast<TBitBtn*>(Sender); //сдесь создается указатель на объкт типа TBitBtn?
   if(bbCurr->Font->Color != clBlue) return; //если выбрана буква с другим цветом, то цвет ее не меняется?
   if(Tags.size()) //если свойство кнопки Tag имеет число, дальше непонятно...
     {
        TBitBtn *bbLast = dynamic_cast<TBitBtn*>(lBB->Items[Tags[Tags.size() - 1]]);//??
        bool Good = ((abs(bbLast->Tag - bbCurr->Tag) == 1) || (abs(bbLast->Tag - bbCurr->Tag) == N));// оcобенно, что такое abs()?
        if(!Good) ChangeWordColor(clBlue);//если флаг не Good, то вызывается функция...
     }
     Tags.push_back(bbCurr->Tag); //сдесь в вектор добавляется число Tag?
     bbCurr->Font->Color = clRed; //цвет символа меняется?
     OurWord += bbCurr->Caption; //в переменную из свойства доюавляются символы?
     int index = lb_Words->Items->IndexOf(OurWord);//??
0
Модератор
 Аватар для D1973
9902 / 6440 / 2454
Регистрация: 21.01.2014
Сообщений: 27,335
Записей в блоге: 3
20.07.2019, 09:35
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//Метод обработчик нажатия на кнопку на игровом поле. Назначается всем динамически созданным кнопкам с буквами
void __fastcall Tfrm_Main::LetterClick(TObject *Sender)
{
//Объявляем переменную класса TBitBtn которая указывает на конкретную кнопку, которую нажал пользователь. 
//За это отвечает параметр Sender - указатель на объект, вызвавший данный обработчик события
   TBitBtn *bbCurr = dynamic_cast<TBitBtn*>(Sender);
//Если цвет шрифта нажатой кнопки отличен от синего, значит эта кнопка уже нажималась, повторное нажатие запрещено.
//Просто прерываем обработчик события, не выполняя никаких действий
   if(bbCurr->Font->Color != clBlue) return;
//В целочисленный вектор Tags записываем тэги нажатых кнопок. Нужен для определения положения любой кнопки, 
//символизирующей букву слова в списке объектов (TObjectList *lBB) и для правильного определения "соседей" 
//(верно ли была нажата кнопка по отношению к предыдущей
//Если размер вектора Tags не нулевой, т.е. это не первая буква слова, то...
   if(Tags.size())
     {
//Считываем из вектора его последнее значение /Tags[Tags.size() - 1]/, 
//находим по этому значению, как по индексу, объект в списке объектов /lBB->Items[]/, 
//явно приводим тип полученного объекта и типу наших кнопок /dynamic_cast<TBitBtn*>()
//после этого объявляем переменную TBitBtn *bbLast как указатель на извлеченный из списка объект
        TBitBtn *bbLast = dynamic_cast<TBitBtn*>(lBB->Items[Tags[Tags.size() - 1]]);
//Далее определяется правильность нажатия кнопки...
//текущая и предыдущая кнопки должны располагаться рядом по горизонтали или по вертикали.
//Матрица у нас заполняется построчно (это определяется двойным циклом в функции CreateGameField();)
//отсюда: модуль разности индексов объектов в списке, отвечающих за текущую и предыдущую кнопки может быть:
//равен 1 - если текущая и предыдущая кнопки находятся рядом по горизонтали
//равен N - если текущая и предыдущая кнопки находятся рядом по вертикали
//Где N - размерность матрицы (определяется в функции Fill())
//Проверяем эти 2 условия и записываем результат в переменную Good, без которой можно было бы прекрасно обойтись, 
//но ввел ее для наглядности
        bool Good = ((abs(bbLast->Tag - bbCurr->Tag) == 1) || (abs(bbLast->Tag - bbCurr->Tag) == N));
//Если условие не выполнено - очищаем все ранее введенные буквы слова, вызывая функцию ChangeWordColor(), которая:
//отменяет выделение отмеченных ранее букв слова, окрашивая их "рабочим" цветом (в нашем случае - синим);
//очищает вектор тэгов
//обнуляет переменную OurWord, в которую мы записываем буквы искомого слова
        if(!Good) ChangeWordColor(clBlue);
     }
//Если же текущая кнопка нажата правильно то добавляем ее тэг в конец вектора тэгов
     Tags.push_back(bbCurr->Tag);
//Окрашиваем текст кнопки в красный цвет, что указывает на то, что данная буква уже была задействована
     bbCurr->Font->Color = clRed;
//Добавляем букву, которая находится в заголовке кнопки к переменной OurWord, в которой "собирается" искомое слово
     OurWord += bbCurr->Caption;
//Проверим, не собрано ли у нас искомое слово, записанное в переменную OurWord:
//присвоим целочисленной переменной index значение позиции нашего слова в списке слов
     int index = lb_Words->Items->IndexOf(OurWord);
//если слово найдено (номер позиции отличен от -1) то...
     if(index >= 0)
       {
//удаляем это слово из списка слов
          lb_Words->Items->Delete(index);
//Вызываем функцию ChangeWordColor() которая:
//Окрашивает найденное нами слово в "победный" зеленый цвет
//Очищает переменную OurWord и вектор тэгов Tags, подготавливая их к приему нового слова
          ChangeWordColor(clGreen);
//Если список строк оказался пуст
          if(lb_Words->Items->Count == 0)
            {
//Сообщаем пользователю, что он кроссавчег!!!
               Application->MessageBox(L"Отлично! Вы справились!\nМожете выбирать другую тему", L"ПОБЕДА!!!", MB_OK | MB_ICONINFORMATION);
//Очищаем игровое поле, список слов (хотя он и так уже пуст) и выпадающий список тем, чтобы пользователь мог выбрать 
//другую тему
               ClearGameField(true);
            }
       }
}
//GAME OVER!
2
0 / 0 / 0
Регистрация: 04.07.2019
Сообщений: 38
20.07.2019, 09:59  [ТС]
Вот и сообщаю, что D1973, кроссавчег, ну и Lelik-pahan, тоже! Спасибо, огроменное!!!

Добавлено через 10 минут
Всё таки, что значит сам оператор abs(), бегло погуглил не нашёл, я бы конечно нарыл, да времени у меня в обрез, сорри... 8(
0
Модератор
 Аватар для D1973
9902 / 6440 / 2454
Регистрация: 21.01.2014
Сообщений: 27,335
Записей в блоге: 3
20.07.2019, 10:03
Цитата Сообщение от Vasily Tyorkin Посмотреть сообщение
что значит сам оператор abs()
модуль целого числа
0
0 / 0 / 0
Регистрация: 04.07.2019
Сообщений: 38
21.07.2019, 10:17  [ТС]
Ради интереса, проект, выдающий ошибку под win32, переделал под win64, ошибка исчезла. По ходу вот где собака порылась!
0
21.07.2019, 17:58

Не по теме:

Vasily Tyorkin, я уже тоже на это грешу - терки с памятью на платформе х64 в приложении х86... Хотя странно как-то, не наблюдал такового до сих пор... ПисАть побольше чего-нибудь надо, однако...

0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
22.07.2019, 09:35
В этом приложении нет ничего специфичного, заточенного под x64, так что дело точно не в выбранной для сборки разрядности.
Либо в коде есть ошибка, либо проект криво собирался из-за того, что нужно было почистить obj файлы, либо что-то ещё...
Кстати, может у Vasily Tyorkin библиотека borlndmm.dll от 6-го билдера затесалась в системной директории?
0
Модератор
 Аватар для D1973
9902 / 6440 / 2454
Регистрация: 21.01.2014
Сообщений: 27,335
Записей в блоге: 3
22.07.2019, 10:04
Lelik-pahan, да нет, не только на его стороне проблемы были... Принес проект домой - получил такой же AV. Победил только перекомпиляцией в x64...
Мне вот интересно, есть у Вас возможноcть запустить проект из поста #26? Как он у Вас себя поведет?
0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
22.07.2019, 10:44
Цитата Сообщение от D1973 Посмотреть сообщение
есть у Вас возможноcть запустить проект из поста #26? Как он у Вас себя поведет?
Я его запускал, но ошибку воспроизвести не удалось (пробовал один раз только). Также пробовал CodeGuard включить, он тоже ни на что не ругался.
0
22.07.2019, 12:12

Не по теме:

самая "редисочная" ситуация: когда ошибки где-то нет, а где-то есть... С другой стороны - если откомпилировать приложение на станции, где ошибки нет, то оно нормально работает на других станциях - значит, проблема в среде... Черт его знает...

0
 Аватар для Lelik-pahan
1703 / 899 / 207
Регистрация: 25.11.2009
Сообщений: 1,848
22.07.2019, 13:49
Цитата Сообщение от D1973 Посмотреть сообщение
С другой стороны - если откомпилировать приложение на станции, где ошибки нет, то оно нормально работает на других станциях
А нет возможности посмотреть на "проблемном" ПК наличие borlndmm.dll от старой версии? Может быть в System32, в SysWOW64 или в какой-то директории, которая добавлена в переменную среды PATH. И вы не проверяли, не решает ли проблему очистка проекта?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2019, 13:49
Помогаю со студенческими работами здесь

Не считываются пробелы из файла
Допустим пытаюсь считать из файла &quot;ghf fk ff 123 1&quot;, а выводится/считывается &quot;ghffkff1231&quot; В чем может быть проблема? #include...

Из типизированного файла считываются не те числа
Здравствуйте. Есть программа, которая считывает числа из файла в массив. uses crt; type mas=array of integer; procedure...

Из файла считываются лишние символы
Всем доброго времени суток. Вот недавно во время выполнения лабороторной в школе столкнулся со следующей проблемой. FILE* src =...

Неправильно считываются символы из файла
FILE *input; FILE *output; input=fopen(&quot;input.txt&quot;,&quot;r&quot;); output=fopen(&quot;output.txt&quot;,&quot;w&quot;); char a; int i; ...

Не считываются пробелы из бинарного файла
Всем салют. Завис на одной проблемке, может кто поможет? При побайтовом считывании бинарного файла (для примера расширение .png),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru