Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Создание парсера (https://forum.antichat.xyz/showthread.php?t=71819)

Trieg 28.05.2008 16:33

Создание парсера
 
Необходимо создать парсер на пхп под достаточно редкий формат файла.. есть немного инфы о формате..
PHP код:

DWORD mesh_count
:FOREACH( mesh_count )
  
ZSTR path
:ENDFOR
 
DWORD material_count
:FOREACH( material_count )
  
ZSTR path
  WORD rotation
  WORD alpha_enabled
  WORD two_sided
  WORD alpha_test_enabled
  WORD alpha_ref_enabled
  WORD z_write_enabled
  WORD z_test_enabled
  WORD blending_mode
  WORD specular_enabled
  FLOAT alpha
  WORD glow_type
  FLOAT red
  FLOAT green
  FLOAT blue
:ENDFOR
 
DWORD effect_count
:FOREACH( effect_count )
  
ZSTR path
:ENDFOR
 
DWORD object_count
:FOREACH( object_count )
  
DWORD unk1
  DWORD unk2
  DWORD unk3
  DWORD mesh_count
  
:IF( mesh_count )
    :FOREACH( 
mesh_count )
      
DWORD mesh_id
      DWORD material_id
      
:WHILE( true )
        
BYTE flag_id
        
:IF( flag_id == ) BREAK //Leave the WHILE(true) loop
        
BYTE flag_size
        BYTE
[flag_sizedata
      
:WEND
    
:ENDFOR
    
    
WORD object2_count
    
:FOREACH( object2_count )
      
DWORD mesh_id
      DWORD material_id
      
:WHILE( true )
        
BYTE flag_id
        
:IF( flag_id == ) BREAK //Leave the WHILE(true) loop
        
BYTE flag_size
        BYTE
[flag_sizedata
      
:WEND
    
:ENDFOR
    
    
//These are for Bounding Box
    
FLOAT minX
    FLOAT minY
    FLOAT minZ
    FLOAT maxX
    FLOAT maxY
    FLOAT maxZ
  
:ENDIF
:ENDFOR 

возможно есть ошибки.. это сейчас не критично.

когда начал писать парсер столкнулся с проблемой..
как можно реализовать на пхп ZSTR?

с DWORD и WORD проблем у меня не возникло..
PHP код:

  function getWord($file) {
    
$ret unpack("S"fread($file2));
    return 
$ret[1];
  }

  function 
getDword($file) {
    
$ret unpack("L"fread($file4));
    return 
$ret[1];
  } 

а вот как сделать ZSTR (читать строку до пустого байта)

PS:ранее мне не когда не приходилось сталкиваться с подобной работой.. по этому опыта мало,вот и прошу помощи =)


Время: 15:56