forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   lib_jsr75 & files проблема (http://forum.boolean.name/showthread.php?t=7924)

Doctor Drive 04.03.2009 23:26

lib_jsr75 & files проблема
 
Мне надо read_byte() с одного файла и write_byte() в другой одновременно, тоесть не закрывая первый.
jsr75mf не умеет read_byte() и write_byte(). Есть какойто выход?

NitE 04.03.2009 23:55

Ответ: lib_jsr75 & files проблема
 
Мне надо одновременно съесть колбасу и сыр. У меня нет ни того ни другого, что делать ? ы

ViNT 05.03.2009 01:33

Ответ: lib_jsr75 & files проблема
 
Можно писать не прямо в файл, а в строку, а потом сохранить её, или загрузить файл в строку и читать из нее. Просто библиотеку Lib_jsr75mf переделать я могу, но когда - не знаю, сейчас очень большие проблемы со временем.

Doctor Drive 05.03.2009 01:46

Ответ: lib_jsr75 & files проблема
 
а как это записать байт в строку? дай пример пожалуйста

ViNT 05.03.2009 01:51

Ответ: lib_jsr75 & files проблема
 
Если я ничего не путаю, то просто
S:=S+Byte;

Дальше, когда записали все, просто сохраняем с помощью lib_jsr75.

odd 05.03.2009 01:56

Ответ: lib_jsr75 & files проблема
 
Если не хочешь мучиться со строками (а скорее всего потом будут проблемы при чтении строки назад посимвольно), то используй специальную библиотеку Lib_bytes кажется называется. Там можно хранить информацию как массив байтов.

Doctor Drive 05.03.2009 02:05

Ответ: lib_jsr75 & files проблема
 
ясно, спасибо. Буду пробовать :)

Doctor Drive 05.03.2009 02:18

Ответ: lib_jsr75 & files проблема
 
vint, s:=s+byte(); или s:=s+byte; не работает. О_о

ru_aSa_45 05.03.2009 07:58

Ответ: lib_jsr75 & files проблема
 
возможен такой вариант (если конечно в J2ME возможно открытие 2х файлов одновременно )

1. берётся джава декомпайлер (например CAVAJ JAVA DECOMPILER)
2. открывается через него файл class библиотеки lib_jsr75i (lib_jsr75i.class)
3. копируется код библиотеки
4. создаётся библиотека с lib_jsr75if2 (например в jGRASP) вставляется копируемый код
5. переименовывается имя класса lib_jsr75i на lib_jsr75if2
6. компилируется библиотека lib_jsr75if2
7. lib_jsr75if2.class копируется в Lib Мидлет Паскаля
8. подключается библиотека lib_jsr75if2 в проекте

далее в коде Мидлет Паскаля

Lib_jsr75i.open_file("Файл 1");
Lib_jsr75if2.open_file("Файл 2");

ну и далее чтение из первого файла Lib_jsr75i.read_byte() и запись во второй файл Lib_jsr75if2.write_byte()

ViNT 05.03.2009 13:06

Ответ: lib_jsr75 & files проблема
 
Цитата:

Сообщение от Doctor Drive (Сообщение 99590)
vint, s:=s+byte(); или s:=s+byte; не работает. О_о

Так и знал, что перепутаю...

Должно работать примерно так:

PHP код:

var
 
b:integer;
 
s:string;

begin
 b
:=read_byte;
 
//обработка
 
...
 
s:=s+chr(b);
 
 
//после обработки всего файла
 
write_file('output.bin',s); 


Doctor Drive 05.03.2009 17:23

Ответ: lib_jsr75 & files проблема
 
снова БОЛЬШОЕ спс. буду пробовать

Doctor Drive 05.03.2009 18:05

Ответ: lib_jsr75 & files проблема
 
vint, а ты уверен что если сохранить набор символов [s:=s+chr(b)] то получится файл? А то мне нужно сохранить png - я png filter делаю.

И как определить конец файла??
тоесть

repeat
a := read_byte;
until a = что? или както по-другому сделать??

ViNT 05.03.2009 19:55

Ответ: lib_jsr75 & files проблема
 
По идее, самый надежный и быстрый (в смысле производительности) способ - прочитать файл полностью в строку потом выбирать из нее байты по очереди с помощью GetChar, переводить их из char в int помощью ord и обрабатывать. Это если файл не сильно большой.

Doctor Drive 05.03.2009 20:13

Ответ: lib_jsr75 & files проблема
 
так мне так и не сказал... этот способ что выше будет работать на картинках?

И как опредилить конец??? пнг то ясно, а конец любого файла?

NitE 05.03.2009 21:20

Ответ: lib_jsr75 & files проблема
 
eof() вероятно

Doctor Drive 05.03.2009 21:43

Ответ: lib_jsr75 & files проблема
 
тоесть

repeat
a := read_byte;
until a = EOF;

правильно? а то я немогу протестить у меня jsr75 нет




и еще
fileopen := '/c:/a.pak';
// i - щетчик
//-----------------
//тута процес
//-----------------
63строка - a1 := jsr75i.write_file(fileopen + i + '.png', nf[i]);

пишет что ошибка

error pngfilter.mpsrc63: identifier '(' is not a function, variable or constant name

вроде все тут правильно....... что за фигня?

NitE 05.03.2009 22:07

Ответ: lib_jsr75 & files проблема
 
я даже незнаю о чем разговор - знаю только что почти на всех языках это команда eof (end of file)
но пойдее используя выдуманный мной только что синтаксис должно выглядит так
Код:

file=loadfile("shit")
while not eof(file)
read_byte()
wend


Doctor Drive 05.03.2009 22:51

Ответ: lib_jsr75 & files проблема
 
там в хелпе написано что возвращает EOF. просто мне надо чтобы тот кто точно знает написал, правильно ли
repeat
a := read_byte;
until a = EOF;

а то вроде компилит, но не знаю, будет ли работать, я у себя проверить не могу.

ViNT 06.03.2009 00:18

Ответ: lib_jsr75 & files проблема
 
В jsr75 Eof'а вроде нет.
Нужно читать в строку и обрабатывать её от начала до конца (фунция Length).

ViNT 06.03.2009 00:35

Ответ: lib_jsr75 & files проблема
 
В общем, должно быть примерно так:
PHP код:

program jsr75tst;
uses jsr75;
var
 
i,byte:Integer;
 
s:string;
begin
 s
:=jsr75.read_file('/c:/other/file'+integertostring(i)+'.png');
 
 for 
i:=0 to Length(S)-do
 
begin
  byte
:=ord(GetChar(S,i));
  
//обработка
  
S:=SetChar(S,CHR(Byte),i);
 
end;
 
 
jsr75.write_file('/c:/other/file.png',s);
 
end


Doctor Drive 06.03.2009 00:42

Ответ: lib_jsr75 & files проблема
 
Цитата:

fileopen := '/c:/a.pak';
// i - щетчик
//-----------------
//тута процес
//-----------------
63строка - a1 := jsr75i.write_file(fileopen + i + '.png', nf[i]);

пишет что ошибка

error pngfilter.mpsrc63: identifier '(' is not a function, variable or constant name

вроде все тут правильно....... что за фигня?
я уже разобрался, там же public static void было :-D

так как ты говорил записать в файл то что из байтов сделал это должно быть write_file или может все таки write_file_a (без переобразований unicode - ASCII)??

Doctor Drive 06.03.2009 14:34

Ответ: lib_jsr75 & files проблема
 
теперь собранный jar не хочет спрашивать доступ к фс...
вот прога:




PHP код:

program MediaFilter;
uses jsr75i;
var 
a1openinfsm1m2mgsibyteiiinfinteger;
stopboolean;
nf: array[0..50of string;
b1: array[0..1of integer;
b2: array[0..1of integer;
b3: array[0..1of integer;
b4: array[0..1of integer;
b5: array[0..1of integer;
b6: array[0..1of integer;
fileopenenddssstring;
ok, exit, backgtccommand;
begin
b1
[0] := 137;
b2[0] := 80;
b3[0] := 78;
b4[0] := 66;
b5[0] := 96;
b6[0] := 130;

b1[1] := 77;
b2[1] := 84;
b3[1] := 104;
b4[1] := 255;
b5[1] := 47;
b6[1] := 00;
repeat
showmenu
('PNG Filter'CH_IMPLICIT);
m1 := menuAppendString('PNG Filter');
m2 := menuAppendString('MID Filter');
ok := createcommand('Ok'CM_OK1);
exit := 
createcommand('Exit'CM_EXIT1);
addcommand(ok);
addcommand(exit);
repeat gtc := getclickedcommanduntil (gtc ok) or (gtc = exit);
clearform;
removecommand(ok);
removecommand(exit);
if 
gtc ok then begin

mgsi 
:= menugetselectedindex;
if 
mgsi 0 then endd := '.png';
if 
mgsi 1 then endd := '.mid';

 
:= 0;
ii := -1;
showform;
repeat
a1 
:= formAddTextField('Open File''/c:/'70TF_ANY);
addcommand(ok);


repeat until getclickedcommand ok;
formremove(fs);
removecommand(ok);
open := 0;
fileopen := formgettext(a1);
open := file_exists(fileopen);
if 
open <> 1 then begin
fs 
:= formaddstring('Error! File not found...');
addcommand(ok);
repeat until getclickedcommand ok;
removecommand(ok);
clearform;
end;

until open 1;
a1 := 0;
clearform;
fs := formaddstring('Please wait...');


ss:=jsr75i.read_file('/c:/other/file'+integertostring(i)+'.png');
repeat
stop 
:= false;
    
    
ii := ii 1;
    
a1:=ord(GetChar(ss,ii));
    
    if 
a1 b1[mgsithen begin
    
       nf
[i] := SetChar(nf[i],CHR(Byte),inf);
       
ii := ii 1;
       
inf := inf 1;
           
a1:=ord(GetChar(ss,ii));
             if 
a1 b2[mgsithen begin
                 nf
[i] := SetChar(nf[i],CHR(Byte),inf);
                 
ii := ii 1;
               
inf := inf 1;
                     
a1:=ord(GetChar(ss,ii));
                       if 
a1 b3[mgsithen begin
                         repeat
                            nf
[i] := SetChar(nf[i],CHR(Byte),inf);
                            
ii := ii 1;
                          
inf := inf 1;
                                  
a1:=ord(GetChar(ss,ii));
                                  
                                  if 
a1 b4[mgsithen begin
                                   nf
[i] := SetChar(nf[i],CHR(Byte),inf);
                                   
ii := ii 1;
                                  
inf := inf 1;
                                    
a1:=ord(GetChar(ss,ii));
                                      if 
a1 b5[mgsithen begin
                                           nf
[i] := SetChar(nf[i],CHR(Byte),inf);
                                           
ii := ii 1;
                                                                            
inf := inf 1;
                                                                       
a1:=ord(GetChar(ss,ii));
                                                                     if 
a1 b6[mgsithen begin
                                                                                stop 
:= true;
                                                                                
nf[i] := SetChar(nf[i],CHR(Byte),inf);
                                                                                
:= 1;
                                                                                
inf := 0;
                                                                     
end;
                                                                
end;
                                                        
end;
                                  
                                  
                                  
                                  
                         
until stop true;
                                   
                       
end;
             
end;
    
end;

until ii Length(ss)-1;
for 
:= 0 to i do begin
    jsr75i
.write_file_a(fileopen integertostring(i) + enddnf[i]);
end;
clearform;
fs := formaddstring('Extracted ' integertostring(i) + 'files.');
addcommand(ok);
repeat until getclickedcommand ok;
end;
until gtc = exit;
end


Doctor Drive 06.03.2009 17:34

Ответ: lib_jsr75 & files проблема
 
^^^^^^^^Принцып работы - парсит файл, сравнивая каждый байт. если первые 3 байта совпали с первыми 3 байтами в базе то он начинает извлекать png или mid файл (зависимо от того, что выбрано в меню) извлекает пока не встретятся последние 3 байта. потом далее ищет png или mid в файле (пока не закончится файл).

ViNT 06.03.2009 19:17

Ответ: lib_jsr75 & files проблема
 
Какая-то проблема с функцией file_exists, если после нее поставить open:=1, то программа запрашивает доступ и выводит "Please wait...".
Можно попробовать использовать аналогичную функцию из jsr75ex.

Doctor Drive 06.03.2009 21:57

Ответ: lib_jsr75 & files проблема
 
решил сделать проверку через
jsr75ex.can_read дык оно не компилит - пишет "mp2.exe error приложение будит закрыто" и звук винды "пумц". пробовал раз 10 нифига...
сделал без проверки на существование... но так стрьомновато(((

ViNT 07.03.2009 00:09

Ответ: lib_jsr75 & files проблема
 
Чето я думал, что у меня в этой библиотке была функция file_exists, оказалось забыл сделать. В данном случае can_read даже лучше.
На счет вылета - это давно известный баг MP, иногда помогает установка режима совместимости с Win98.

Doctor Drive 07.03.2009 01:07

Ответ: lib_jsr75 & files проблема
 
------------------------------------------------
Дык это не просто вылет.
На обычных вылетах нету звука винды "пумц" и при обычном вылете на 2-3раз компилит.
А тут всегда вылетает когда jsr75ex ставить. не компилит вопше. скока раз не пробовал.
------------------------------------------------
а что за "установка режима совместимости с Win98"??
Это как делается?

ViNT 07.03.2009 15:46

Ответ: lib_jsr75 & files проблема
 
Так, причина всетаки была в библиотеке, каким-то образом в архив попал поврежденный класс. Перекомпилил библиотеку, теперь не вылетает. Обновил в теме.

Doctor Drive 07.03.2009 19:16

Ответ: lib_jsr75 & files проблема
 
что за "установка режима совместимости с Win98"??

aNNiMON 07.03.2009 20:27

Ответ: lib_jsr75 & files проблема
 
Установка режима совместимости с Win98, это эмуляция запуска приложения на конкретной OC.
Чтобы установить совместимость с ОС, нажми правой кнопкой на exe-файл, и выбери в контекстном меню снизу "Свойства". Далее, в новом окне переключись на вкладку "Совместимость", и поставь галочку на "Запустить программу в режиме совместимости с:" и выбери из списка "Windows 98 / Windows Me".

Doctor Drive 07.03.2009 20:58

Ответ: lib_jsr75 & files проблема
 
спс, анимон!

ViNT, там трабл с can_read. когда я проверял, как работает, набрал несуществующий файл. функция can_read вместо возвратить 0 возвратила 1 и создала какойто странный файл с введенным именем. оО

Попробуй сделать file_exists в jsr75i, без нее очень не удобно ((((((((

ViNT 07.03.2009 23:45

Ответ: lib_jsr75 & files проблема
 
Добавил функцию file_exists в jsr75ex.


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

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