forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Создание/запись/чтение файлов (http://forum.boolean.name/showthread.php?t=16701)

Yadro 25.04.2012 18:54

Создание/запись/чтение файлов
 
Через блокнот файл выглядит вот так:
hello world
hello world

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

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

Вопрос как создавать файл и записать побайтно информацию, который выглядел также.

ViNT 26.04.2012 20:11

Ответ: Создание/запись/чтение файлов
 
Это, как я понял, юникод. Библиотеки для работы с ФС пишут в ASCII, так что нужно составлять таблицу символов юникода (по 2 байта на символ) и вручную побайтно записывать данные. Точно так же побайтно прописывать FFFE и 0D000A00.

Yadro 27.04.2012 23:21

Ответ: Создание/запись/чтение файлов
 
Нашёл библиотеку jsr75i. Она запишет байты. Но как быть с юникод, библиотеку сложно написать?
вот и 1000 набежала)

ViNT 28.04.2012 00:13

Ответ: Создание/запись/чтение файлов
 
Там библиотека не нужна. Заводим два массива, в них вручную прописываем коды символов (в первый массив - первый байт, во второй - второй) естественно, массивы нужно построить так, чтобы индекс соответствовал коду символа 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 в юникод, но потом опять же придется результат на байты резать, тоже лишние телодвижения.

Yadro 06.05.2012 18:39

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


PHP код:

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


ViNT 06.05.2012 18:42

Ответ: Создание/запись/чтение файлов
 
Вероятно проблема в том, что файл не закрывается после создания, поэтому программа не может его открыть.

Yadro 06.05.2012 18:59

Ответ: Создание/запись/чтение файлов
 
Вставил в код:

PHP код:

if opnf<>1 then
    begin
    setcolor 
(255,255,255);
    
fillRect(00getwidthgetheight);
    
setcolor (0,0,0);
    
drawtext('Невозможно откр. файл',0,0);
    
delay(1000);
    
end

но похоже открыть может, текст 'Невозможно откр. файл' не выводит.

ViNT 07.05.2012 00:28

Ответ: Создание/запись/чтение файлов
 
То, что не выводит - во-первых, нет repaint, без него ничего не выведет, во-вторых, если в коде он есть, то может не выводить из-за зависания потока.

Yadro 07.05.2012 08:19

Ответ: Создание/запись/чтение файлов
 
Как же я забыл про repaint. Добавил close_file и удалил reset. И заработало:-D


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot