Page 3 sur 7

Re: Les pointeurs de Prinny 2

Message non luPosté: Samedi 18 Juin 2011 à 19:24:28
par valioukha
Pour :

local sortie = Output.new("Fichier", "Test.txt", "wb")

Change en :

local sortie = Output.new("Fichier", entry.name_out, "wb")

Re: Les pointeurs de Prinny 2

Message non luPosté: Dimanche 19 Juin 2011 à 16:13:28
par BahaBulle
Ca m'apprendra à faire quelque vite fait sans tester (surtout que je n'ai pas trop l'habitude de l'API lua du hareng :p)

Et valioukha a rison pour le sortie ;)

Dès que j'ai 5 minutes, je teste mon code et le corrige.

Re: Les pointeurs de Prinny 2

Message non luPosté: Lundi 20 Juin 2011 à 19:25:47
par BahaBulle
Bon, je jeté un oeil.

DarkCenobyte a écrit:Enfin en gros il repart à zéro tous les 4 pointeurs...

Ca c'est de ta faute, tu as déplacé la ligne "local num_pt = 1"

Voilà le code corrigé :
Code: Tout sélectionner
nameFileTable   = "ascii.tbl"

local list_files = {
   { name_in = "Demo00_jp.dat", name_out = "US-script05.txt" },
}


SEEK_SET = 0
SEEK_CUR = 1
SEEK_END = 2


for _, entry in ipairs(list_files) do
   -- Initialisation des variables
   local fileScript   = Fichier.new()
   local table_pt     = Table_pointeurs.new()
   local tbl          = Table_ext_ins.new()
   local bufferScript = Buffer.new()

   fileScript:open(entry.name_in, "rb")

   -- Récupération de la taille du Fichier
   fileScript:seek(0, SEEK_END)
   local sizeFile = fileScript:tell()
   fileScript:seek(0, SEEK_SET)

   -- Récupération du nombre de pointeurs
   local nb_pointer = 0
   for i = 1, 4 do
      nb_pointer = nb_pointer + shift_l(fileScript:get(), 8 * (i - 1))
   end

   -- Récupération des pointeurs
   local num_pt = 1
   for i = 1, nb_pointer do
      -- On zap 8 octets
      for j = 1, 8 do
         fileScript:get()
      end

      -- On lit les 4 pointeurs qui suivent
      for j = 1, 4 do
         local pointer = 0
         for k = 1, 4 do
            pointer = pointer + shift_l(fileScript:get(), 8 * (k - 1))
         end

         local pt = Pointeur.new()
         pt:numero(num_pt)
         pt:valeur(pointer)
         pt:taille(4)
         num_pt = num_pt + 1

         table_pt:ajouter(pt)
      end
   end

   -- Chargement de la table
   tbl:ouvrir(nameFileTable)

   -- Récupération des données à extraire
   local adressScript = nb_pointer * 24 + 4
   local sizeScript = sizeFile - adressScript
   fileScript:seek(adressScript, SEEK_SET)
   fileScript:read(bufferScript, sizeScript)

   local sortie = Output.new("Fichier", entry.name_out, "wb")

   -- Extraction du script
   Ext_ins.extraire(bufferScript, tbl, sortie, table_pt)

   fileScript:close()
   bufferScript:clear()
end

Re: Les pointeurs de Prinny 2

Message non luPosté: Mardi 21 Juin 2011 à 18:32:19
par DarkCenobyte
Je viens de tester, ça marche :D ('fin il met plusieurs <FIN> à la fin du texte, mais ça peut-être les 00 qui dépasse quand j'ai sortie le fichier avec mon éditeur hexadécimal),
je regarderais demain à nouveau pour un moyen d'insérer, mais je suis vraiment pas douer en LUA... Sinon je pense que je vais aussi regarder un peu sur internet quelques tuto sur le langage LUA (juste les bases du trucs déjà, car je m'y retrouve quand même moins que dans un code en C je trouve).

Re: Les pointeurs de Prinny 2

Message non luPosté: Mardi 21 Juin 2011 à 18:41:17
par BahaBulle
Les <FIN> en trop, ce doit être parce qu'il y a plusieurs 0 à la fin du fichier qui doivent servir d'alignement.

Le lua est assez simple mais je trouve que l'API du hareng n'est pas très facile d'utilisation.

Re: Les pointeurs de Prinny 2

Message non luPosté: Lundi 27 Juin 2011 à 22:25:53
par DarkCenobyte
Bon, j'ai pas trop progressé dans le script d'insertion (j'ai rien fait qui marche enfaite x) ), mais je suis en pleine période de BAC (je passe ma dernière épreuve oral Mercredi), je m'y remettrais vers ce week end xD .

Re: Les pointeurs de Prinny 2

Message non luPosté: Samedi 2 Juillet 2011 à 11:13:11
par DarkCenobyte
Bon alors toujours sur l'étape pour extraire les valeurs entre les pointeurs, j'ai modifier le code pour tenter de les récupérer et les mettre dans un autre fichier (car je vois pas trop où les mettre enfaite...) en me basant sur le readme_lua.txt du hareng-tool, et mon code ne fonctionne pas :oops: (je me suis rebasé sur le script d'extraction de départ pour l'instant car je le trouve plus simple là x) ):

Code: Tout sélectionner
nameFileOutput  = "Prinny2-script01.txt"
nameFileOutput2   = "Prinny2-data01.txt"
nameFileScript  = "test_hareng.dat"
-- nameFilePointer = "fichier2.bin"
nameFileTable   = "ascii.tbl"
nameFileTable2  = "asciiB.tbl"
adressScript    = 0x010C24
--adressPointer   = 0x0C
adressPointer   = 0x04
-- (first text only) sizeScript      = 0x2D
sizeScript      = 0x02429F
nb_pointer      = 2860
--nb_pt2 = 0

SEEK_SET = 0
SEEK_CUR = 1
SEEK_END = 2

-- Ouverture du fichier contenant les pointeurs
fileScript   = Fichier.new()
table_pt     = Table_pointeurs.new()
table_pt2     = Table_pointeurs.new()
tbl          = Table_ext_ins.new()
tbl2       = Table_ext_ins.new()
bufferScript = Buffer.new()
bufferData    = Buffer.new()

fileScript:open(nameFileScript, "rb")
fileScript:seek(adressPointer, SEEK_SET)

-- Récupération des pointeurs
local num_pt = 1
for i = 1, nb_pointer do
   -- On zap les 8 premiers octets
   for j = 1, 8 do
      fileScript:get()
   end

   -- On lit les 4 pointeurs qui suivent
   for j = 1, 4 do
      local pointer = 0
      for k = 1, 4 do
         pointer = pointer + shift_l(fileScript:get(), 8 * (k - 1))
      end

      local pt = Pointeur.new()
      pt:numero(num_pt)
      pt:valeur(pointer)
      pt:taille(4)
      num_pt = num_pt + 1

      table_pt:ajouter(pt)
   end

end

-- Chargement de la table
tbl:ouvrir(nameFileTable)
tbl2:ouvrir(nameFileTable2)

-- Récupération des données à extraire
-- fileScript:open(nameFileScript, "rb")
fileScript:seek(adressScript, SEEK_SET)
fileScript:read(bufferScript, sizeScript)

sortie = Output.new("Fichier", nameFileOutput, "wb")

-- Extraction du script
Ext_ins.extraire(bufferScript, tbl, sortie, table_pt)

--EDIT 2/07/2011 : Récupération des 8 octets entre 4 pointeurs (zapper 16 octets).
--Positionnement début fichier:
fileScript:seek(adressPointer, SEEK_SET)
--Création d'un fichier de sortie
sortie2 = Output.new("Fichier", nameFileOutput2, "wb")
   --Récupérer les 8 octets
   for j = 1, 8 do
      fileScript:read(bufferData, 8)
      --Zapper 16 octets
      fileScript:seek(SEEK_CUR+16,SEEK_CUR)
   end
   Ext_ins.extraire(bufferData, tbl2, sortie2, table_pt2)

--FIN EDIT


J'ai du mal à trouver comment faire ce que je veux enfaite:
Dans la doc' , y a pas mal de fonction pour manipuler les pointeurs ou récupérer le texte, comme par exemple donner une taille à un pointeur, mais comme là c'est ni l'un ni l'autre... J'ai essayer de faire comme si c'était du texte sans pointeur (j'ai ajouter une table de pointeur vide)...
Mais je suis pas sûr de m'y prendre correctement :| ...

Re: Les pointeurs de Prinny 2

Message non luPosté: Lundi 4 Juillet 2011 à 9:30:02
par BahaBulle
Et pourquoi tu veux les mettre dans un autre fichier ?

En fait, je ne comprends pas ce que tu veux faire.

Re: Les pointeurs de Prinny 2

Message non luPosté: Lundi 4 Juillet 2011 à 18:14:33
par DarkCenobyte
... en gros j'aurais pas à toucher au script d'extraction... mais faire que le script d'insert récupère les valeurs en passage dans le premier fichier ?

Ce serais pas plus facile si je les exportais d'abord dans un autre fichier, et que le script d'insertion utilise alors les deux fichiers exporter (le texte et les valeurs là...) ?

'fin quand j'y pense là, ça m'a l'air compliqué dans les deux cas x) ...

J'ai commencé à mieux comprendre les scripts (les fonctions de l'API, ...) et le lua, mais j'ai du mal à comprendre le fonctionnement avec les variables i , j , k dans les boucles car j'avais jamais fait un truc comme ça en C... (ça doit être logique... mais j'ai pas capté la logique sur ça xD ...)

Re: Les pointeurs de Prinny 2

Message non luPosté: Lundi 4 Juillet 2011 à 19:02:31
par BahaBulle
Ah oui, c'est vrai que tu as un système de pointeurs à la con.
Là, comme ça, j'ai pas d'idées pour gérer ça facilement et je n'ai pas la tête à réfléchir :p

DarkCenobyte a écrit: mais j'ai du mal à comprendre le fonctionnement avec les variables i , j , k dans les boucles car j'avais jamais fait un truc comme ça en C... (ça doit être logique... mais j'ai pas capté la logique sur ça xD ...)

Tu n'as jamais fait de boucle "for" en C : for (i = 1 ; i < 10 ; i++)... :shock:

Il s'agit juste d'itérateurs. Un moyen pour faire plusieurs fois la même chose.
Exemple avec ces 2 bouts de code qui font exactement la même chose.
Code: Tout sélectionner
list = {}
list[1] = fileScript:get()
list[2] = fileScript:get()
list[3] = fileScript:get()
list[4] = fileScript:get()

Code: Tout sélectionner
list = {}
for i = 1, 4 do
   list[i] = fileScript:get()
end