Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
1
Delphi 6-7

Ошибка: RichEdit line insertion error

28.12.2022, 11:46. Показов 1949. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый день.В результате работы кода возникает ошибка "RichEdit line insertion error".Задача программы открывать файлы в формате cpp866 сразу перекодировать в windows 1251 и выводить информацию в RichEdit постранично.Само перекодирование работает,но с выводом есть проблемы. Буду благодарен любой помощи,прикладываю код.

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
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
function StrOemToAnsi(const S: AnsiString): AnsiString;
begin
  if Length(S) = 0 then Result := ''
  else
    begin
      SetLength(Result, Length(S));
      OemToAnsiBuff(@S[1], @Result[1], Length(S));
    end;
end;
 
procedure TMainForm.OpenFiles(Sender: TObject);
begin
    if OpenDialog.Execute then
      TXT := TStringList.Create;
      TXT.LoadFromFile(OpenDialog.FileName);
      TXTS := StrOemToAnsi(TXT.Text);
      Page := 1;
      ShowPage;
end;
 
procedure TMainForm.ShowPage;
var
  i: Integer;
begin
  RichEdit.Clear;
  for i := LinesOfPage * (Page - 1) to LinesOfPage * Page - 1 do begin
    if i >= TXT.Count then
      Break;
      RichEdit.Lines.Add(TXTS[i]);
  end;
end;
 
function TMainForm.PageCount: Integer;
begin
  Result := TXT.Count div LinesOfPage;
  if TXT.Count mod LinesOfPage > 0 then
    Inc(Result);
end;
 
procedure TMainForm.NextPage;
begin
  if Page < PageCount then begin
    Inc(Page);
    ShowPage;
  end;
end;
 
procedure TMainForm.PrevPage;
begin
  if Page > 1 then begin
    Dec(Page);
    ShowPage;
  end;
end;
 
procedure TMainForm.Button1Click(Sender: TObject);
begin
  PrevPage;
end;
 
procedure TMainForm.Button2Click(Sender: TObject);
begin
   NextPage;
end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2022, 11:46
Ответы с готовыми решениями:

Ошибка: Richedit line insertion error
Я пролистал уже существующие темы, но как такового ответа не нашел. Может объясните кто-то, что за...

RichEdit line insertion error. Что делать?
Delphi3 при щелчке на объект TStrings в Object Inspector выдает ошибку: RichEdit line insertion...

Ошибка "richedit line insertion error"
когда пытаюсь задать количество символов строке для вывода в RichEdit: AnsiString...

Избавиться от "RichEdit line insertion errror"
Здравствуйте! Посоветуйте, как избавиться от такой ошибки: &quot;RichEdit line insertion errror&quot; Ошибка...

21
Модератор
9392 / 6161 / 2403
Регистрация: 21.01.2014
Сообщений: 26,268
Записей в блоге: 3
28.12.2022, 12:26 2
Что такое TXTS? Если публикуете какие-то обрывки своего кода - озаботьтесь хотя бы, чтобы описания переменных присутствовали.
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
28.12.2022, 12:53  [ТС] 3
Извините пожалуйста,сразу как-то и не подумал.

TXT // имя файла с текстом
TXTS // Имя файла уже с перекодированным текстом
LinesOfPage // количество строк на странице
0
Модератор
3715 / 2222 / 774
Регистрация: 15.11.2015
Сообщений: 8,860
28.12.2022, 14:04 4
Цитата Сообщение от FROSYA_26 Посмотреть сообщение
TXT // имя файла с текстом
Цитата Сообщение от FROSYA_26 Посмотреть сообщение
TXT := TStringList.Create;
Серьёзно? Давайте весь проект, или не ждите внятной помощи.
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
28.12.2022, 14:54  [ТС] 5
Простите меня ещё раз пожалуйста,виноват что сразу все не скинул.
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
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
unit Unit1;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
 
type
TMainForm = class(TForm)
Button1: TButton;
Button2: TButton;
OpenDialog: TOpenDialog;
RichEdit: TRichEdit;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure OpenFiles(Sender: TObject);
procedure ShowPage;
function PageCount: Integer;
procedure NextPage;
procedure PrevPage;
 
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
MainForm: TMainForm;
TXT: TStringList; // имя файла с текстом 
TXTS : String;  // имя файла уже с перекодированным тестом
Page: Integer;
 
const
LinesOfPage = 30; // кол-во строк на странице
 
implementation
 
 
 
{$R *.dfm}
 
function StrOemToAnsi(const S: AnsiString): AnsiString;
begin
if Length(S) = 0 then Result := ''
else
begin
SetLength(Result, Length(S));
OemToAnsiBuff(@S[1], @Result[1], Length(S));
end;
end;
 
procedure TMainForm.OpenFiles(Sender: TObject);
begin
if OpenDialog.Execute then
TXT := TStringList.Create;
TXT.LoadFromFile(OpenDialog.FileName);
TXTS := StrOemToAnsi(TXT.Text);
Page := 1;
ShowPage;
end;
 
procedure TMainForm.ShowPage;
var
i: Integer;
begin
RichEdit.Clear;
for i := LinesOfPage * (Page - 1) to LinesOfPage * Page - 1 do begin
if i >= TXT.Count then
Break;
RichEdit.Lines.Add(TXTS[i]);
 
end;
end;
 
function TMainForm.PageCount: Integer;
begin
Result := TXT.Count div LinesOfPage;
if TXT.Count mod LinesOfPage > 0 then
Inc(Result);
end;
 
procedure TMainForm.NextPage;
begin
if Page < PageCount then begin
Inc(Page);
ShowPage;
end;
end;
 
procedure TMainForm.PrevPage;
begin
if Page > 1 then begin
Dec(Page);
ShowPage;
end;
end;
 
procedure TMainForm.Button1Click(Sender: TObject);
begin
PrevPage;
end;
 
procedure TMainForm.Button2Click(Sender: TObject);
begin
NextPage;
end;
end.
0
Модератор
3715 / 2222 / 774
Регистрация: 15.11.2015
Сообщений: 8,860
28.12.2022, 15:44 6
Я программу не запускал, но вопрос по алгоритму появился:
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TMainForm.ShowPage;
var
i: Integer;
begin
RichEdit.Clear;
for i := LinesOfPage * (Page - 1) to LinesOfPage * Page - 1 do begin
if i >= TXT.Count then // <<<---------- Вот здесь в TXT.Count содержится количество строк в файле
Break;            // А в TXTS содержится весь перекодированный текст
RichEdit.Lines.Add(TXTS[i]); // <<<--------- А здесь добавляется LinesOfPage штук символов из TXTS, начиная с символа номер LinesOfPage * (Page - 1).
end;
end;
Если даже в каждой строке по 1 символу, то так не выйдет, так как, ещё есть символы конца строки.

Добавлено через 11 минут
FROSYA_26, вот эти 2 процедуры исправь вот так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TMainForm.OpenFiles(Sender: TObject);
begin
  if OpenDialog.Execute then
  begin
    TXT := TStringList.Create;
    TXT.LoadFromFile(OpenDialog.FileName);
    TXT.Text := StrOemToAnsi(TXT.Text);
    Page := 1;
    ShowPage;
  end;
end;
 
procedure TForm1.ShowPage;
var
  i: Integer;
begin
  RichEdit.Clear;
  for i := LinesOfPage * (Page - 1) to LinesOfPage * Page - 1 do begin
    if i >= TXT.Count then
      Break;
    RichEdit.Lines.Add(TXT[i]);
  end;
end;
А переменную TXTS можно вообще убрать.
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
28.12.2022, 15:56  [ТС] 7
Большое спасибо AzAtom убрал лишнюю переменную так сказать,это действительно логично.
0
Модератор
3715 / 2222 / 774
Регистрация: 15.11.2015
Сообщений: 8,860
28.12.2022, 16:19 8
FROSYA_26, ещё желательно StringList (TXT) создавать только 1 раз, а то сейчас утечка памяти получается.
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
28.12.2022, 16:34  [ТС] 9
Большое спасибо за совет,сейчас поправлю.А относительно получаемой ошибки у Вас случайно нет идей в чем она может быть? Просто у меня появилась мысль что может ошибка связанна с длиной строки по которым идёт разделение по страницам? Просто отдельно в коде и перекодирование и разделение по страницам работает,а вот в месте пока никак
0
Модератор
3715 / 2222 / 774
Регистрация: 15.11.2015
Сообщений: 8,860
28.12.2022, 16:48 10
Цитата Сообщение от FROSYA_26 Посмотреть сообщение
А относительно получаемой ошибки у Вас случайно нет идей в чем она может быть?
Это происходит потому, что при Page = 1 значение LinesOfPage * (Page - 1) равно 0, и получается пытаешься взять символ №0 из строки, TXTS[0], тут и получается ошибка.
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
28.12.2022, 16:55  [ТС] 11
Получается что у перекодированной строки нет первого символа в строке? Просто с обычным тхт файлом если не использовать перекодирование то все работает,а ошибка именно в разделении перекодированных файлов.Хммм
Извините пожалуйста меня,но может у вас есть какое-то решение этого вопроса,хотя бы примерное,я бы был вам премного благодарен за помощь
0
Модератор
3715 / 2222 / 774
Регистрация: 15.11.2015
Сообщений: 8,860
28.12.2022, 17:02 12
Цитата Сообщение от FROSYA_26 Посмотреть сообщение
Получается что у перекодированной строки нет первого символа в строке?
Нет, это потому, что в строках (string) первый символ имеет номер 1, в отличие от остальных массивов, списков и т.д.
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
28.12.2022, 18:29  [ТС] 13
Так у меня же тоже после перекодирования получаются строки.Такие же как и в обычном файле просто в кодировке другой.Или я что-то не понимаю?

Добавлено через 5 минут
Так у меня же тоже после перекодирования получаются строки.Такие же как и в обычном файле просто в кодировке другой.Или я что-то не понимаю? А нет стоп,у меня же StringList,получается
0
Модератор
3715 / 2222 / 774
Регистрация: 15.11.2015
Сообщений: 8,860
28.12.2022, 19:00 14
FROSYA_26, в первом варианте все эти строки укладывались в одну строковую переменную TXTS, вот в ней первый символ имеет индекс 1. А по замыслу нужно не отдельные символы выбирать, а целиком строки, как в исправленном варианте.
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
28.12.2022, 19:35  [ТС] 15
Я вроде бы понял и исправил код как Вы советовали мне,но результат тот же и ошибка та же.
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
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    RichEdit1: TRichEdit;
    OpenDialog1: TOpenDialog;
    procedure OpenFiles(Sender: TObject);
    procedure ShowPage;
    function PageCount: Integer;
    procedure NextPage;
    procedure PrevPage;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
TXT: TStringList;
Page: Integer;
 
const
LinesOfPage = 30;
 
implementation
 
{$R *.dfm}
function StrOemToAnsi(const S: AnsiString): AnsiString;
begin
if Length(S) = 0 then Result := ''
else
begin
SetLength(Result, Length(S));
OemToAnsiBuff(@S[1], @Result[1], Length(S));
end;
 
end;
 
 
 
procedure TForm1.OpenFiles(Sender: TObject);
begin
if OpenDialog1.Execute then
TXT := TStringList.Create;
TXT.LoadFromFile(OpenDialog1.FileName);
TXT.Text := StrOemToAnsi(TXT.Text);
Page := 1;
ShowPage;
end;
 
procedure TForm1.ShowPage;
var
i: Integer;
begin
RichEdit1.Clear;
for i := LinesOfPage * (Page - 1) to LinesOfPage * Page - 1 do begin
if i >= TXT.Count then
Break;
RichEdit1.Lines.Add(TXT[i]);
 
end;
end;
 
function TForm1.PageCount: Integer;
begin
Result := TXT.Count div LinesOfPage;
if TXT.Count mod LinesOfPage > 0 then
Inc(Result);
end;
 
procedure TForm1.NextPage;
begin
if Page < PageCount then begin
Inc(Page);
ShowPage;
end;
end;
 
procedure TForm1.PrevPage;
begin
if Page > 1 then begin
Dec(Page);
ShowPage;
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  PrevPage;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 NextPage;
end;
end.
0
Модератор
3715 / 2222 / 774
Регистрация: 15.11.2015
Сообщений: 8,860
28.12.2022, 19:46 16
Лучший ответ Сообщение было отмечено FROSYA_26 как решение

Решение

Цитата Сообщение от FROSYA_26 Посмотреть сообщение
результат тот же и ошибка та же
У меня работает.
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
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    OpenDialog: TOpenDialog;
    RichEdit: TRichEdit;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
    TXT: TStringList; // Текст
    Page: Integer;
    procedure ShowPage;
    function PageCount: Integer;
    procedure NextPage;
    procedure PrevPage;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
const
  LinesOfPage = 30; // кол-во строк на странице
 
implementation
 
{$R *.dfm}
 
// https://www.cyberforum.ru/delphi-beginners/thread3065738.html
 
function StrOemToAnsi(const S: AnsiString): AnsiString;
begin
  if Length(S) = 0 then
    Result := ''
  else
  begin
    SetLength(Result, Length(S));
    OemToAnsiBuff(@S[1], @Result[1], Length(S));
  end;
end;
 
//procedure TMainForm.OpenFiles(Sender: TObject);
procedure TForm1.Button3Click(Sender: TObject);
begin
  if OpenDialog.Execute then
  begin
    TXT := TStringList.Create;
    TXT.LoadFromFile(OpenDialog.FileName);
    TXT.Text := StrOemToAnsi(TXT.Text);
    Page := 1;
    ShowPage;
  end;
end;
 
procedure TForm1.ShowPage;
var
  i: Integer;
begin
  RichEdit.Clear;
 
  for i := LinesOfPage * (Page - 1) to LinesOfPage * Page - 1 do begin
    if i >= TXT.Count then
      Break;
    RichEdit.Lines.Add(TXT[i]);
  end;
end;
 
function TForm1.PageCount: Integer;
begin
  Result := TXT.Count div LinesOfPage;
  if TXT.Count mod LinesOfPage > 0 then
    Inc(Result);
end;
 
procedure TForm1.NextPage;
begin
  if Page < PageCount then begin
    Inc(Page);
    ShowPage;
  end;
end;
 
procedure TForm1.PrevPage;
begin
  if Page > 1 then begin
    Dec(Page);
    ShowPage;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  PrevPage;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  NextPage;
end;
 
end.
Вложения
Тип файла: rar delphi-beginners thread3065738 OEM to ANSI.rar (4.3 Кб, 2 просмотров)
1
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
28.12.2022, 20:02  [ТС] 17
Спасибо за помощь,оно вроде как работает.Один файл я смог открыть и он нормально разбивает,но остальные почему-то даже не открываются с такой же ошибкой.Как вы думаете это может быть из-за длины строки?
Миниатюры
Ошибка: RichEdit line insertion error  
0
Модератор
3715 / 2222 / 774
Регистрация: 15.11.2015
Сообщений: 8,860
28.12.2022, 21:09 18
Цитата Сообщение от FROSYA_26 Посмотреть сообщение
но остальные почему-то даже не открываются
Где файл, чтобы попробовать?
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 67
28.12.2022, 21:21  [ТС] 19
Извините,что сразу не скинул
Вложения
Тип файла: zip 03113_43.zip (2.3 Кб, 11 просмотров)
0
Модератор
3715 / 2222 / 774
Регистрация: 15.11.2015
Сообщений: 8,860
29.12.2022, 01:44 20
FROSYA_26, здесь RTF документ и кодировка CP1251. Нужно расширение сменить на .RTF и откроется в том же word-е, только страницу сделать альбомной надо.
1
29.12.2022, 01:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2022, 01:44
Помогаю со студенческими работами здесь

Ошибка There was an error parsing the query. [ Token line number = 1,Token line offset = 43,Token in error = записи ]
В чем проблема, не могу понять. Вот исходник: using System; using System.Collections.Generic;...

Ошибка Parse error: syntax error, unexpected T_VARIABLE on line 11
Добрый день. Столкнулась с такой ошибкой в коде формы Parse error: syntax error, unexpected...

Ошибка Parse error: syntax error, unexpected '[' in W:\domains\hospitalCateringSys-master\index.php on line 69
Открываю через OpenServer, php 7.1 я понимаю что говорит об не закрытых скобках в строке 69, НО...

ошибка в коде Parse error: syntax error, unexpected '{' in E:\OpenServer\domains\test.ru\index.php on line 17
ошибка в коде Parse error: syntax error, unexpected '{' in E:\OpenServer\domains\test.ru\index.php...

Ошибка Parse error: syntax error, unexpected T_STRING in /home/bh22299/public_html/wp-config.php on line 25
Здравствуйте. Залил сайт на хостинг и выдаёт ошибку Вот участок кода из файла конфига.......

В чем ошибка? Parse error: syntax error, unexpected '[' in Z:\home\localhost\www\inc\config.php on line 17
Что в этой строке не так? static $a = Я новичок в этом деле. Голову сломал с этой ошибкой....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru