С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210

Memo не может открыть весь файл

29.08.2024, 09:59. Показов 794. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Впервые столкнулся с такой "ерундой".
Memo открывает только 1724 строки (не полностью) текстового файла, содержащего 6413 строк.
Прикрепляю проект и файл, который хочу открыть.
В чём может быть причина?
project.rar
8-Test.rar
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.08.2024, 09:59
Ответы с готовыми решениями:

Открыть файл в Memo
Всем привет! Возникла такая задача. Необходимо реализовать механизм открытия текстового файла в Memo c помощью контекстного меню ...

Открыть файл в memo
Помогите пожалуйста открыть файл в кодировке unicode в мемо

Открыть текстовый файл в Memo
Доброго времени суток, вроде всё прописал правильно,при попытке открыть файл выдаёт ошибку код: void __fastcall...

9
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
29.08.2024, 10:34  [ТС]
Вот так выглядит строка 1724 в Memo ($c0 $80 и далее не отображаются):
a4 f8 06 06 a0 02 00 00 c0 80 28 00 00 00 00 00 ??..?...
Вот так эта строка выглядит в Блокноте
a4 f8 06 06 a0 02 00 00 c0 80 28 00 00 00 00 00 ¤ш.. ...АЂ(.....
В Блокноте меняю букву "А" на "1" и весь файл открывается в Memo:
a4 f8 06 06 a0 02 00 00 c0 80 28 00 00 00 00 00 ¤ш.. ...1Ђ(.....

В чём "прикол"?
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,352
29.08.2024, 10:36
На каком-то символе затыкается в строке 1724. Удалил в этой строке символ "А" в правой колонке и загрузились все строки.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
29.08.2024, 11:21
Что характерно - под Линуксом вообще не открывает файл. То есть, после выбора файла 8-Test.txt в диалоге - пустой Memo...

P.S. После конвертации файла в UTF-8 командой
Bash
1
iconv -f CP866 -t UTF-8 8-Test.txt > 8-Test2.txt
, новый файл прекрасно полностью отобразился в Memo...
0
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
29.08.2024, 12:01  [ТС]
А если открывать так, то проблем не возникает:
Delphi
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
// Открыть файл.
procedure TForm1.MenuItem1Click(Sender: TObject);
var
  tf: TextFile;  // Объявляем файловую переменную для текстового файла.
  S: String;
begin
  if Memo1.Modified then begin
    if MessageDlg('Сохранение файла','Текущий файл бил изменён.'+#13+
                'Сохранить изменения?',
                 mtConfirmation, [mbYes, mbNo], 0) = mrYes then
      MenuItem2Click(Sender);
  end;
  if OpenDialog1.Execute then begin
    if not FileExists(OpenDialog1.FileName) then exit;
    Memo1.Clear;
    AssignFile(tf, OpenDialog1.FileName);
    try
      Reset(tf);
      while not Eof(tf) do begin
        Readln(tf, S);
        Memo1.Lines.Add(S);
      end;
    finally
      CloseFile(tf);
    end;
    Memo1.Modified:=false;
  end;
end;
Только уж слишком долго открывается этот файл...

Добавлено через 20 минут
Чтобы ускорить чтение файла попробовал сначала записывать строки в StringList, а затем копировать Text в Memo. Получается относительно быстро, но дальше строки 1724 не записывается.
Более-менее приемлемый результат по скорости получается, если на время чтения файла Memo делать невидимым.
Delphi
1
2
3
4
5
6
7
8
    try
      Reset(tf);
      Memo1.Visible:=false;
      while not Eof(tf) do begin
............
    finally
      CloseFile(tf);
      Memo1.Visible:=true;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
29.08.2024, 12:06
Цитата Сообщение от shyub Посмотреть сообщение
то проблем не возникает
Под Windows. Под линуксами точно так же возникают проблемы, только на этот раз - в строке 3098. Если пишется кроссплатформенное приложение - то это нужно иметь в виду. Отлаживать нужно под все необходимые платформы. Кстати. код из поста №5 можно попробовать ускорить:

Pascal
1
2
3
4
5
6
7
8
9
uses ..., FileUtil;
 
// ...
 
  if OpenDialog1.Execute then begin
    OpenDialog1.Title:='Открыть файл'; // Чтобы заголовок был русским.
    Memo1.Clear; // Очистка.
    Memo1.Lines.Text:=ReadFileToString(OpenDialog1.FileName); // <--- читаем сразу весь файл в строку.
  end;
0
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
29.08.2024, 12:45  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Кстати. код из поста №5 можно попробовать ускорить
На строке 1724 прекращает чтение.
ОС Windows-10 x64, Laz4Android-2.2.2 x32.
Цитата Сообщение от volvo Посмотреть сообщение
Если пишется кроссплатформенное приложение
Да это будет одноразовая утилита для расшифровки перехваченного обмена по RS485.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
29.08.2024, 13:16
Вместо
Цитата Сообщение от shyub Посмотреть сообщение
на время чтения файла Memo делать невидимым
можно запретить обновление Memo на то же время:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
    AssignFile(tf, OpenDialog1.FileName);
    try
      Reset(tf);
      Memo1.Lines.BeginUpdate; // <---
      while not Eof(tf) do begin
        Readln(tf, S);
        Memo1.Lines.Add(S);
      end;
      Memo1.Lines.EndUpdate; // <---
    finally
      CloseFile(tf);
    end;
1
394 / 194 / 48
Регистрация: 11.07.2013
Сообщений: 1,210
29.08.2024, 19:22  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
можно запретить обновление Memo на то же время:
Спасибо, не знал про это...

Добавлено через 2 минуты
Volvo, а в Linux это будет работать (вдруг когда-нибудь пригодится)?

Добавлено через 4 минуты
И можно ли чуть подробнее об этом:
Delphi
1
iconv -f CP866 -t UTF-8 8-Test.txt > 8-Test2.txt
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
29.08.2024, 19:28
Цитата Сообщение от shyub Посмотреть сообщение
а в Linux это будет работать
методы BeginUpdate/EndUpdate? Будут, конечно. Но вот сам код с исходным текстовым файлом - не будет работать корректно. Для того, чтобы он заработал - надо сконвертировать кодировку файла в UTF8, что как раз и делается через iconv
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.08.2024, 19:28
Помогаю со студенческими работами здесь

Как открыть bat-файл на весь экран?
Как открыть бат файл на весь экран (Full screen). параметр -MAX не подходит виндовс XP Прошу ответить как можно скорее. Очень нужно. ...

Открыть и отобразить файл png на весь экран
Как в vc++ открыть изображение c:\\1.png на весь экран

Открыть в memo файл из списка в filelistbox
Вообщем привет) у меня такая проблемка( у меня есть filelistbox в котором формируется список текстовых файлов в папке, есть memo...

Как открыть файл word в memo
Подскажите как открыть файл word в memo с возможностью редактирования?

Подскажите как открыть файл word в memo
Подскажите возможно открыть word документ в memo только для чтения?? если да то как это сделать?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru