Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 25.04.2012, 18:54   #1
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Создание/запись/чтение файлов

Через блокнот файл выглядит вот так:
hello world
hello world

А через hex редактор:
FFFE680065006C006C006F00090077006F0072006C0064000D000A00
680065006C006C006F00090077006F0072006C0064000D000A00

те в начале файла запись FFFE, и дальше идут буквы 68-h, два нуля снова буква и тд. enter-это,0D000A00

Вопрос как создавать файл и записать побайтно информацию, который выглядел также.
(Offline)
 
Ответить с цитированием
Старый 26.04.2012, 20:11   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Создание/запись/чтение файлов

Это, как я понял, юникод. Библиотеки для работы с ФС пишут в ASCII, так что нужно составлять таблицу символов юникода (по 2 байта на символ) и вручную побайтно записывать данные. Точно так же побайтно прописывать FFFE и 0D000A00.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо ViNT за это полезное сообщение:
RblSb (26.02.2014), Yadro (27.04.2012)
Старый 27.04.2012, 23:21   #3
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Создание/запись/чтение файлов

Нашёл библиотеку jsr75i. Она запишет байты. Но как быть с юникод, библиотеку сложно написать?
вот и 1000 набежала)
(Offline)
 
Ответить с цитированием
Старый 28.04.2012, 00:13   #4
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Создание/запись/чтение файлов

Там библиотека не нужна. Заводим два массива, в них вручную прописываем коды символов (в первый массив - первый байт, во второй - второй) естественно, массивы нужно построить так, чтобы индекс соответствовал коду символа ASCII. То есть, например, символ имеет номер N и код AABB, тогда в первом массиве под индексом N должно быть AA, во втором - BB. Дальше все просто
 for i := 1 to Length(S)-1 do
 begin
  jsr_75i.write_byte(b1[ord(GetChar(S,i))]);
  jsr_75i.write_byte(b2[ord(GetChar(S,i))]);
 end;
Примерно так, от балды написал.

Хотя, наверное есть какой-нибудь алгоритм пересчета из ASCII в юникод, но потом опять же придется результат на байты резать, тоже лишние телодвижения.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
RblSb (26.02.2014)
Старый 06.05.2012, 18:39   #5
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Вопрос Ответ: Создание/запись/чтение файлов

Появилась новая проблема. При использовании функций read_byte и reset приложение виснет (jsr75i). Созданный файл нормально создается и читается. Но отрываться никак не может. В чём проблема?


Program write;
uses jsr75i;
var 
ofile,i,opnf,byte,ss:integer;
s,savedir,hw:string;

Begin
    
//save
    
savedir:='/e:/text.txt';
    
s:='hello world';
    
file_create(savedir);
    
ofile:=open_file(savedir);
    for 
i:=0 to length(s)-do write_byte(ord(GetChar(s,i)));
    
flush;
    
    
//open
    
opnf:=jsr75i.open_file(savedir);
        if 
opnf<>1 then 
        begin 
        setcolor 
(255,255,255); 
        
fillRect(00getwidthgetheight); 
        
setcolor (0,0,0); 
        
drawtext('Невозможно откр. файл',0,0); 
        
delay(1000); 
        
end
    
jsr75i.reset;

    for 
byte:=0 to jsr75i.file_size(savedir) do
      
begin
        ss
:=jsr75i.read_byte;
        
hw:=hw+ctr(ss);
      
end;

    
setcolor (255,255,255);
    
fillRect(00getwidthgetheight);
    
setcolor (0,0,0);
    
drawtext(hw,0,0);
    
delay(5000);
End
(Offline)
 
Ответить с цитированием
Старый 06.05.2012, 18:42   #6
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Создание/запись/чтение файлов

Вероятно проблема в том, что файл не закрывается после создания, поэтому программа не может его открыть.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Yadro (07.05.2012)
Старый 06.05.2012, 18:59   #7
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Создание/запись/чтение файлов

Вставил в код:

if opnf<>1 then
    begin
    setcolor 
(255,255,255);
    
fillRect(00getwidthgetheight);
    
setcolor (0,0,0);
    
drawtext('Невозможно откр. файл',0,0);
    
delay(1000);
    
end
но похоже открыть может, текст 'Невозможно откр. файл' не выводит.
(Offline)
 
Ответить с цитированием
Старый 07.05.2012, 00:28   #8
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Создание/запись/чтение файлов

То, что не выводит - во-первых, нет repaint, без него ничего не выведет, во-вторых, если в коде он есть, то может не выводить из-за зависания потока.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Yadro (07.05.2012)
Старый 07.05.2012, 08:19   #9
Yadro
Нуждающийся
 
Регистрация: 24.04.2012
Сообщений: 57
Написано 7 полезных сообщений
(для 10 пользователей)
Ответ: Создание/запись/чтение файлов

Как же я забыл про repaint. Добавил close_file и удалил reset. И заработало
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 00:17.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com