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

Текстовый редактор + своя таблица кодировки (File; //Нетипизированный файл)

13.07.2012, 14:27. Показов 3519. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть темы, научится писать редактор текста (File; //Нетипизированный файл)
Начал тут писать немного, но зашел в тупик.
Программа примерно должна выглядеть так
Текстовый редактор + своя таблица кодировки (File; //Нетипизированный файл)

1 открываешь файл.
(по умолчанию в edit1, edit2(вписаны нужные смещения))
жмем загрузить файл он загружается hex кодом.
Текстовый редактор + своя таблица кодировки (File; //Нетипизированный файл)


Как нужные hex коды преобразовать в цифровые и буквенные значения согласно таблице кодировки.
Иследуюмый файл 074.BIN
Кодировка для поля английский
Код
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9

41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4a=J
4b=K
4c=L
4d=M
4e=N
4f=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5a=Z

61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6a=j
6b=k
6c=l
6d=m
6e=n
6f=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7a=z


3B=;
3A=:
3D==
2C=,
20= 
2E=.
21=!
3f=?
22=&
2D=-
2f=/
27='
Кодировка для поля русский
Код
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9

41=А
42=Б
43=В
44=Г
45=Д
46=Е
47=Ж
48=З
49=И
40=Й
4a=К
4B=Л
4C=М
4d=Н
4e=О
4f=П
50=Р
51=С
52=Т
53=У
5B=Ф
5d=Х
54=Ц
55=Ч
56=Ш
57=Щ
=Ъ
=Ы
=Ь
58=Э
59=Ю
5a=Я

61=а
62=б
63=в
64=г
65=д
66=е
67=ж
68=з
69=и
27=й
6a=к
6b=л
6c=м
6d=н
6e=о
6f=п
70=р
71=с
72=т
73=у
23=ф
24=х
75=ц
74=ч
76=ш
77=щ
=ъ
7e=ы
7d=ь
78=э
79=ю
7a=я

3B=;
3A=:
3D==
2C=,
20= 
2E=.
21=!
3f=?
22=&
2D=-
2f=/
Таблицы текстовые просто расширение *.tbl

Как подключить таблицы?

Текстовый редактор.7z
Вложения
Тип файла: zip Текстовый редактор.zip (307.0 Кб, 54 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2012, 14:27
Ответы с готовыми решениями:

Текстовый редактор и своя таблица кодировки
Всем привет! Пытаюсь разобраться как можно реализовать текстовый редактор который будет работать с...

Текстовый редактор и своя таблица кодировки
Всем привет! Пытаюсь разобраться как можно реализовать текстовый редактор который будет работать с...

Текстовый редактор со своей таблицой кодировки
Если повторяюся, извиняйте Как сделать текстовый редактор со своей кодировкой? К примеру 6D=A...

Типизированный, нетипизированный, текстовый файл
Ребята выручайте осталось последняя лаба... а как ее писать 2 часа голову ломаю ( Помогите,...

10
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
19.07.2012, 19:36 2
Вот тебе:
Вложения
Тип файла: rar Текстовый редактор.rar (260.5 Кб, 102 просмотров)
0
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
21.07.2012, 19:01  [ТС] 3
Цитата Сообщение от Одиночка Посмотреть сообщение
Вот тебе:
Класно.

А у меня родился такой вариант. (если вспомнить тему распаковщик псевдо архивов)
Ты там использовал StrList : TStringList; во втором посте.
Я сделал на основе ее и StringGrid

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
procedure TForm1.Button2Click(Sender: TObject);
label // раздел объявления меток
bye;
var
                       f : File;
                 StrList : TStringList;
                       B : Byte;
                BT,s,str : String;   //строки
         s1,II,I,A,B_T,D : Integer;  //числа
       ST_N,ST,STB_N,STB : Integer;  //числа
               ZN_TBL,ZN : LongInt;
begin
  A := StrToInt(Edit1.Text);     //Данные из поля ввода Edit1 (НАЧАЛО ТЕКСТА(СМЕЩЕНИЕ))
  D := StrToInt(Edit2.Text);    //Данные из поля ввода Edit2 (размер в байтах)
  D:=A+D;
  ST:=1;
  ST_N:=0;
  stringgrid1.RowCount:=1;  
  AssignFile(f,OpenDialog1.FileName); //Связываем файловую переменную с файлом
  Reset(f,1);
  //Читаем таблицу...
  StrList:=TStringList.Create;
  StrList.LoadFromFile(OpenDialog3.FileName);
  seek(f,A);
   //Обработка до позиции в файле - D (Edit2)
   While ((Not Eof(f)) And (FilePos(f)<=D)) Do Begin
        s:='';
                       Repeat
                       BlockRead(f, B, 1); // читаем файл пока не встретится 0
                       If B<>00 Then
                               For i:=0 To StrList.Count-1 Do Begin
                               str:=StrList.Strings[i];
                               ZN_TBL:=StrToInt('$'+Copy(str,1,Pos('=',str)-1)); //Начальная позиция в исходном файле
                               Delete(str,1,Pos('=',str));
                               BT:=Copy(str,Pos('=',str)+1,Length(str)-Pos('=',str)); //Имя выходного файла
                                         if B=ZN_TBL then begin
                                         // здесь инструкции, которые надо выполнить, 
                                         // если условие истинно.
                                         S:=S+BT; // формируем имя и записываем его
                                         goto bye;
                                         end;
                               end;
                         S:=S+IntToHex(b,2); // формируем имя и записываем его
                         bye:
                       Until B=00;
                       ST_N:=ST_N+1;
                       stringgrid2.RowCount:=stringgrid2.RowCount+1;
                       stringgrid2.Cells[0,ST_N]:='Строка '+FormatFloat('000',ST_N);
                       stringgrid2.Cells[1,ST]:=S;
                       S1:=Length(StringGrid2.Cells[1,ST]);
                       stringgrid2.Cells[2,ST]:=IntToStr(S1);
                       ST:=ST+1;
     end;
     CloseFile(f); //Закрываем входной файл
     StrList.Free;
     ShowMessage('Русский шрифт загружен!') ; // Выпадает форма(c названием программы) и надписью Русский шрифт загружен!
   end;
 
end.
Также формирует текст, если байта нет в таблице, то выводит его hex код
Не доделал точную длину почему то байт считается в StringGrid за два символа.
И если выводишь длину таблицы - то она превышает положенного.

А как сделать вывод японского текста?
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
21.07.2012, 19:14 4
Ну ты что-то намудрил. Зачем тебе StrinGrid ? Читай таблицу, сразу её перекодируй и загружай в память в массив. Используй перекодировку: по коду символа выбираешь код из таблицы и заменяешь введённый символ.
Чтобы понять, как твой код работает - лучше выложи проект.

Насчёт японского текста даже не знаю. У них, кажется, иероглифы, вообще-то.

И озвучь нормально, что ты хочешь сделать. А то редакторов с перекодировкой хватает. К тому же они могут работать с Юникодом. Автоматически определяют кодировку текста и пр.
0
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
21.07.2012, 19:25  [ТС] 5
Цитата Сообщение от Одиночка Посмотреть сообщение
Ну ты что-то намудрил. Зачем тебе StrinGrid ? Читай таблицу, сразу её перекодируй и загружай в память в массив. Используй перекодировку: по коду символа выбираешь код из таблицы и заменяешь введённый символ.
Чтобы понять, как твой код работает - лучше выложи проект.

Насчёт японского текста даже не знаю. У них, кажется, иероглифы, вообще-то.
Совершенно верно.
Японскую таблицу тоже кинул в проект (на всякий - может какая идея родится - таблица у японцев помоему уникод)
Файл для проверки уже S0000019.NSF
Таблицы
eng.TBL
Rus.TBL
Текстовый редактор.zip
0
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
21.07.2012, 19:35  [ТС] 6
А вот и японская таблица.
psx-JAP.TBL.zip
0
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
21.07.2012, 21:47  [ТС] 7
Цитата Сообщение от Одиночка Посмотреть сообщение
И озвучь нормально, что ты хочешь сделать. А то редакторов с перекодировкой хватает. К тому же они могут работать с Юникодом. Автоматически определяют кодировку текста и пр.
Я только несколько редакторов. Два из них глюченных. Один настраивать надо сутки.
Я хочу написать текстовый редактор (File; //Нетипизированный файл).
Вывел текст в радактор, начиная со значения указанного в edit 1
отредактировал.
Нажал сохранить он сохранился на место от куда был загружен.
Если текст стал короче. То заполнил 00 до размера указанного в edit2

Вобщем самая главная суть:

вытащить текст через таблицу, отобразить в мемо или stringgrid

Редактирую в мемо или stringgrid

и вставляю на место, в файл, через таблицу новый текст.
0
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
21.07.2012, 22:05 8
Нужно подумать. Тебе, фактически, нужен Hex-редактор. Типа как в Dos Navigator-е.
0
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
23.07.2012, 00:03  [ТС] 9
Цитата Сообщение от Одиночка Посмотреть сообщение
Нужно подумать. Тебе, фактически, нужен Hex-редактор. Типа как в Dos Navigator-е.
Да что то типа этого(но чтоб работал с текстом только через мои таблицы кодировки(конечно они будут постоянно меняться(в зависимости от нужной кодировки.))).
И желательно с поддержкой японского.
Японский шрифт на всякий случай.
msgothic.ttc
msmincho.ttc

cpjav40d
Просмоторщик шрифтов.
http://narod.ru/disk/573282110... d.zip.html

Добавлено через 17 часов 0 минут
Delphi
1
2
3
4
5
6
7
8
9
10
//Читаем таблицу (Юникод)...
  AssignFile(f,OpenDialog2.FileName);
  Reset(f,SizeOf(WideChar));
  IL:=FileSize(f);
  //Устанавливаем длину Buf1 такую,
  //чтобы в неё поместились данные из файла.
  SetLength(Buf1,IL);
  BlockRead(f,PWideChar(Buf1)^,IL,II); //Читаем файл...
  StrList.Text:=WideCharLenToString(PWideChar(Buf1),II);
  CloseFile(f); //Закрываем файл таблицы
Попробовал через PWideChar
Пока не чего не вышло, вместо букв знаки вопроса.
Лазию по инету ищу какую нибудь инфу. Пока 0
Такое ощущение что этим вопросом не кто не занимался.
0
4 / 4 / 0
Регистрация: 27.05.2012
Сообщений: 174
26.07.2012, 08:24  [ТС] 10
Кстати через Chr - вывод текста не правильный. Надо выводить в hex коды.

Почему не правильный?
Когда начинаешь редактировать строчку то все данные типа $00(квадратик) пропадают. В нашем случае это является обозначением конца строки. Без разницы мемо или грид.
Эта строка$00
Вот такая ситуация.
0
1 / 1 / 0
Регистрация: 02.10.2014
Сообщений: 49
26.01.2015, 18:25 11
А как написать похожий код:
  1. Открываем нетипизированный файл (20 мб) в Memo (или что-то другое, что будет работать с таким размером быстрее, чем Memo).
  2. Читаем файл от одного указанного смещения до другого (относительно начала) (прим. от 000003710 до 00067632).
  3. Загружаем этот кусок в Memo (или что-то другое;) в hex-представлении, но не как на первом скриншоте, а чтобы байты были разделены пробелами.
  4. Изменяем hex-значения в Memo, не трогая пробелы и записываем этот кусок обратно в файл также от сих до сих.
Мало удобно, но меня интересует именно такой вариант (чтобы hex-значения загрузились в Memo).
0
26.01.2015, 18:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2015, 18:25
Помогаю со студенческими работами здесь

Создать или открыть текстовый(типизированный, нетипизированный) файл
1. Создать или открыть текстовый(типизированный, нетипизированный) файл. 2. Выполнить над ...

Текстовый редактор. Хочу сделать Экстракт файл
Надо сделать экстракт файл, ну чтобы путь не полный показывал когда сохраняешь, а короткий,...

Текстовый редактор не сохраняет в файл данные о форматировании
я сделал небольшой текстовый редактор , который меняет шрифт и цвет , но когда я храню...

Текстовый редактор загружает файл порядка 30 секунд
Всем привет, прошу рассказать о том как можно ускорить приложение? Проблема вот в чем, есть...

Создать текстовый файл, используя редактор Блокнот, следующей структуры
Создать текстовый файл, используя редактор Блокнот, следующей структуры (не менее 8 записей):...

Как используя класс FILE записать в текстовый файл в кодировке MS-DOS?
Как используя класс FILE записать в текстовый файл в кодировке MS-DOS?


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

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