Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 21.05.2013
Сообщений: 6
1

Неправильная кодировка при выводе текста из файла

21.05.2013, 19:34. Показов 4741. Ответов 8
Метки нет (Все метки)

Ребят,никак не получается вывести нормальный текст из готового файла,вылазят квадратики и вопросы ,там вообще два файла но мне хотя бы с одним разобраться,кому несложно,помогите пожалуйста


Вот модуль ,в котором и осуществляется данная процедура
Pascal
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
TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  var
 
  Form1: TForm1; 
 
implementation
 
type
 
 Tperson=record
    numperson:integer;
    name,sname:string[30];
    ot:string[20];
     birth:string[8];
     end;
 Tdan=record
    num:integer;
    num_people:integer;
    tel:string[6];
    ads:string[20];
    rost:string[5];
    ves:byte;
    file_person:string[30];
end;
 
 var
    fl:file of Tperson;
      fp: file of Tdan;
      persona:  Tperson;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  assignfile (fl,'C:\lazarus\primers\lab3\persona.txt');
 
  reset(fl);
      //mo1.Visible:=true;
      while not eof (fl) do
       begin
         read(fl,persona);
         Memo1.Lines.Add(persona.name);
       end;
   closefile(fl);
 
end;
 
end.
Вложения
Тип файла: txt persona.txt (700 байт, 13 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2013, 19:34
Ответы с готовыми решениями:

Неправильная кодировка при выводе текста из БД
Добрый вечер друзья. У меня случилась проблема с выводом текста из бд. Когда выводится текст из бд...

Неправильная кодировка текста в PDF при копировании в txt или выводе на веб-странице
Исходная ситуация: на сайте выводится несколько pdf документов и один из них выводится с...

Неправильная кодировка при выводе из бд
Выводит знаки вопроса. В чём может быть причина? В phpmyadmin смотрю - русские буквы...

Неверная кодировка текста при выводе из файла на страницу
Здравствуйте.Столкнулся с проблемой кодировки текста загруженного из текстового файла на...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31466 / 20513 / 7988
Регистрация: 22.10.2011
Сообщений: 35,637
Записей в блоге: 7
21.05.2013, 20:06 2
Pascal
1
2
3
uses lconvencoding; 
// ...
Memo1.Lines.Add(CP866ToUTF8(persona.name));
заставило вывести имя "Антонина" в Memo
1
0 / 0 / 0
Регистрация: 21.05.2013
Сообщений: 6
21.05.2013, 20:58  [ТС] 3
Спасибо! а если применять данную функцию,как лучше ей воспользоваться,необходимо создавать новый файл и к каждой строке из прежнего файла применять функцию ,затем записывать в новый? Если нетрудно можно наглядно показать преобразование
Pascal
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
 function f866to1251(s:string):string;,
var str:utf8string;
i,j:integer;
oem:string;
loc:string;
ex:boolean;
begin
oem:='';
oem:=oem+#128;oem:=oem+#129;oem:=oem+#130;oem:=oem+#131;oem:=oem+#132;
oem:=oem+#133;oem:=oem+#134;oem:=oem+#135;oem:=oem+#136;oem:=oem+#137;
oem:=oem+#138;oem:=oem+#139;oem:=oem+#140;oem:=oem+#141;oem:=oem+#142;
oem:=oem+#143;oem:=oem+#144;oem:=oem+#145;oem:=oem+#146;oem:=oem+#147;
oem:=oem+#148;oem:=oem+#149;oem:=oem+#150;oem:=oem+#151;oem:=oem+#152;
oem:=oem+#153;oem:=oem+#154;oem:=oem+#155;oem:=oem+#156;oem:=oem+#157;
oem:=oem+#158;oem:=oem+#159;oem:=oem+#160;oem:=oem+#161;oem:=oem+#162;
oem:=oem+#163;oem:=oem+#164;oem:=oem+#165;oem:=oem+#166;oem:=oem+#167;
oem:=oem+#168;oem:=oem+#169;oem:=oem+#170;oem:=oem+#171;oem:=oem+#172;
oem:=oem+#173;oem:=oem+#174;oem:=oem+#175;oem:=oem+#224;oem:=oem+#225;
oem:=oem+#226;oem:=oem+#227;oem:=oem+#228;oem:=oem+#229;oem:=oem+#230;
oem:=oem+#231;oem:=oem+#232;oem:=oem+#233;oem:=oem+#234;oem:=oem+#235;
oem:=oem+#236;oem:=oem+#237;oem:=oem+#238;oem:=oem+#239;
loc:='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя';
str := '';
for i:=1 to length(s) do begin
ex:=false;
for j:=1 to length(oem) do begin
if s[i] = oem[j] then begin
str := str + loc[(j-1)*2+1]+loc[(j-1)*2+2]; //брать по 2 байта
ex:=true;
break;
end;
end;
if not ex then str := str + s[i];
end;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31466 / 20513 / 7988
Регистрация: 22.10.2011
Сообщений: 35,637
Записей в блоге: 7
21.05.2013, 21:39 4
В чем смысл? Лазарус так или иначе работает с UTF8, какая разница, будет ли этот файл записан в кодировке cp866, или в Win1251? И в том и в другом случае придется потом, после открытия нового файла все равно конвертировать прочитанные строки в UTF8, чтобы они не коверкались при выводе в мемо.
1
0 / 0 / 0
Регистрация: 21.05.2013
Сообщений: 6
21.05.2013, 22:22  [ТС] 5
Все ясно,спасибо. А как сделать так ,чтоб выводились все поля записи
По идее должно быть так:
Вася Пупкин Мифодиевич
Антонина Васильева Александровна
Виктория Бояркина Вячеславовна

и.т.д
Я когда дабавляю имя и фамилию,все накладывается друг на друга и выводится ни с первого человека,а с Антонины
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31466 / 20513 / 7988
Регистрация: 22.10.2011
Сообщений: 35,637
Записей в блоге: 7
21.05.2013, 23:25 6
У тебя что-то с форматом файла, он похоже битый, смотри: размер записи = 96 байт (вызови SizeOf(Person), и убедись), размер файла - ровно 700 байт. Не делится 700 на 96 нацело. Значит, либо записывались данные другой записью, отличной от той, куда происходит попытка чтения (и случайным образом только расположение строк "Антонина" и "Васильева" совпадает с тем форматом), либо уже записанный файл как-то видоизменялся.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31466 / 20513 / 7988
Регистрация: 22.10.2011
Сообщений: 35,637
Записей в блоге: 7
22.05.2013, 10:44 7
Вот с такой структурой:

Pascal
1
2
3
4
5
6
type
  Tperson = record
    name: string[30];
    sname:string[36];
    ot:string[31];
  end;
(размер структуры, заметь, ровно 100 байт, 700 на 100 делится), данные прекрасно читаются из файла:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
begin
  assignfile (fl, ExtractFilePath(Application.ExeName) + 'persona.txt');
  reset(fl);
  while not eof (fl) do
  begin
    read(fl,persona);
    Memo1.Lines.Add(Format('%s %s %s',
      [CP866ToUTF8(persona.name), CP866ToUTF8(persona.sname), CP866ToUTF8(persona.ot)]));
  end;
  closefile(fl);
end;
Неправильная кодировка при выводе текста из файла
1
0 / 0 / 0
Регистрация: 21.05.2013
Сообщений: 6
22.05.2013, 21:24  [ТС] 8
Спасибо,с этим я,вроде,разобралась,теперь не получается связать поля одной записи с другой,пыталась с номером что-нить придумать,начинаются проблемы с выводом в мемо,мне нужно,чтобы имя,фамилия и отчество из memo1 cоответствовало телефону,адресу и весу из memo2 (порядок не особо важен ,главное-связать)
Pascal
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
114
115
unit Unit6; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,lconvencoding;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    List: TMemo;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
 
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
 
 
var
 
  Form1: TForm1; 
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
type
 
 Tperson=record
    name,sname:string[30];
 
    ot:string[20];
    birth:string[8];
    end;
 Tdan=record
    num:integer;
    num_people:integer;
    tel:string[6];
    ads:string[20];
    rost:string[5];
    
    file_person:string[30];
end;
 
 var
    fl:file of Tperson;
      fp: file of Tdan;
      persona:  Tperson;
      dannie: Tdan;
 
procedure TForm1.Button1Click(Sender: TObject);
 
begin
 
assignfile (fl,'C:\lazarus\primers\lab3\persona.rec');
 
  reset(fl);
      //mo1.Visible:=true;
      while not eof (fl) do
       begin
         read(fl,persona);
 
Memo1.Lines.Add (CP866ToUTF8(persona.name));
Memo1.Lines.Add (CP866ToUTF8(persona.sname));
Memo1.Lines.Add (CP866ToUTF8(persona.ot));
    end;
   closefile(fl);
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
 
begin
    assignfile (fp,'C:\lazarus\primers\lab3\dannie.rec');
    reset(fp);
      //mo1.Visible:=true;
      while not eof (fp) do
       begin
         read(fp,dannie);
         Memo2.Lines.Add(CP866toUTF8(dannie.tel));
         Memo2.Lines.Add(CP866toUTF8(dannie.rost));
         Memo2.Lines.Add(CP866toUTF8(dannie.ads));
               end;
end;
 
 
 
 
end.
Вложения
Тип файла: txt persona.txt (500 байт, 12 просмотров)
Тип файла: txt dannie.txt (608 байт, 9 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31466 / 20513 / 7988
Регистрация: 22.10.2011
Сообщений: 35,637
Записей в блоге: 7
22.05.2013, 22:33 9
У тебя опять порушена вся структура. Извини, но после того, как я подобрал размеры строк, ты с легкостью берешь и уничтожаешь то, что было сделано, упорно ставя свои размеры - ну, так и работай вот с такими данными (именно в таком виде они теперь опять читаются, благодаря твоим стараниям):
Неправильная кодировка при выводе текста из файла

А у меня желание оказывать в этой теме какую-либо помощь почему-то улетучилось. Опять сделаешь - опять перевернут всё и снова "всё не так и всё не то"...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2013, 22:33

Неправильная кодировка при выводе на консоль
Ребята, подскажите плиз, как сделать чтобы в консольных предложениях в Fortran русский язык...

Неправильная кодировка при выводе в браузер
Всем доброго времени суток! Проблема такая: как и все, при установке столкнулся с различием...

Неправильная кодировка при выводе на консоль
Сообственно сабж Как можно исправить?

Неправильная кодировка при выводе из MySQL
Вывожу данные из базы данных MySQL слово Алексей а мне выводит - └ыхъёхщ . Английские буквы...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru