| | Tester la fin d'une ligne, puis lire la suivante | |
| | |
Auteur | Message |
---|
Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 6:51 | |
| Bonjour ! Alors voilà mon problème, j'ai créé des fichiers texte qui ressemblent à ça : - Code:
-
sprite{MON_torch.spr,0.2,0,} data{A,B,C,D,}
Dans Game maker, je me sert de ces lignes pour exécuter des commandes. Tout marche, pour la première ligne.. (si ce n'est que je dois ajouter un "," avant de fermer le crochet) Je voudrais savoir comment faire pour changer de ligne, et par la même occasion, vérifier si un texte est écrit dans le fichier (par exemple, vérifier s'il y a écrit "move") Voilà mon code initiale avec un essaie pour changer la ligne: - Code:
-
if ini=0 { ini=1 objectfile=file_text_open_read(global.path+"\Content\Objects"+class+".info") objectdata=file_text_read_string(objectfile) spritedata=string_copy(objectdata,string_pos("sprite{",objectdata)+string_length("sprite{"),string_pos("}",objectdata)) data=string_copy(objectdata,string_pos("data{",objectdata)+string_length("data{"),string_pos("}",objectdata)) position=0 if file_text_eoln(objectfile) {objectdata=file_text_readln(objectfile)} // Go to next line in case of end of line if file_text_eof(objectfile) {file_text_close(objectfile)}
while (spritedata !="}") { separator=string_pos(",",spritedata); spriteinfo[position]=string_copy(spritedata,0,separator-1); spritedata=string_delete(spritedata,1,separator); position+=1 }
while (data !="}") { separator=string_pos(",",data); datainfo[dposition]=string_copy(data,0,separator-1); data=string_delete(data,1,separator); dposition+=1 }
spr=sprite_add_sprite(global.path+"\Content\Objects\Sprites"+string(spriteinfo[0])) } image_speed=real(spriteinfo[1]) sprite_index=spr depth=real(spriteinfo[2])
Merci pour votre aide, et bonne journée ! _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 11:28 | |
| file_text_readln va juste emmener le curseur de lecture a la ligne et ne retourne rien. |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 11:43 | |
| - onilink_ a écrit:
- file_text_readln va juste emmener le curseur de lecture a la ligne et ne retourne rien.
Oui, donc comment faire ? _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | nicoulas *Excellent utilisateur*
Messages : 6030 Localisation : Dordogne Projet Actuel : Croustaface Tower Defense
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 11:50 | |
| Bon j'ai pas lu tout ton code, mais en gros, pour lire un fichier texte de par exemple 2 lignes : - Code:
-
file = file_textçopen_read("tonfichier.txt"); //on ouvre le fichier ligne1 = file_text_read_string(file); //on lit la première ligne file_text_readln(file); //on retourne à la ligne (on est donc sur la 2e ligne) ligne2 = file_text_read_string(file); //on lit la deuxième ligne file_text_close(file); //on ferme le fichier |
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 11:52 | |
| ben comment faire quoi ? Tu demande comment aller a la ligne ben voila... En gros : - Code:
-
str_ligne1 = file_text_read_string(f) file_text_readln(f) str_ligne2 = file_text_read_string(f) ....
Tu met un ptit while pour lire toutes les lignes et pour trouver du texte dans une chaine de caractère y a string_position et string_count qui t'aiderons |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 11:58 | |
| - nicoulas a écrit:
- Bon j'ai pas lu tout ton code, mais en gros, pour lire un fichier texte de par exemple 2 lignes :
- Code:
-
file = file_textçopen_read("tonfichier.txt"); //on ouvre le fichier ligne1 = file_text_read_string(file); //on lit la première ligne file_text_readln(file); //on retourne à la ligne (on est donc sur la 2e ligne) ligne2 = file_text_read_string(file); //on lit la deuxième ligne file_text_close(file); //on ferme le fichier Et comment je peux calculer le nombre de ligne ? _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 11:59 | |
| tu fait une boucle while avec file_text_eof(f) qui dit quand le curseur arrive a la fin du fichier |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 12:00 | |
| Bon, j'vais tenter tout ça alors Merci _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 12:03 | |
| en ptit exemple pour afficher le contenu d'un fichier texte : - Code:
-
f = file_text_open_read(argument0)
i=0 while(!file_text_eof(f)) { draw_text(16, 16*i, file_text_read_string(f)) file_text_readln(f) i+=1 }
file_text_close(f)
|
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 12:35 | |
| ahh, j'y suis presque ! j'arrive à changer de ligne, il lit bien les lignes, mais voilà le problème.. la seconde ligne ressemble à ça "move{A,B,C,D,}" selon mon code, move[0] est sensé me renvoyer "A", move[1] B, et ainsi de suite jusqu'à D. Mais voilà, move[0] me renvoit "A,B,C" et j'sais pas tellement pourquoi.. move[1],2 et 3 sont pourtant parfait :honte: Voilà mon code : - Code:
-
while(!file_text_eof(objectfile)) { objectdata=file_text_read_string(objectfile); file_text_readln(objectfile); if string_count("sprite",objectdata)>0 { if position!=0 {position=0} // Reset the position if separator!=0 {separator=0} // Reset the separator's location while (objectdata !="}") { separator=string_pos(",",objectdata); spritedata[position]=string_copy(objectdata,string_pos("{",objectdata)+1,separator-1) objectdata=string_delete(objectdata,1,separator) position+=1 } } if string_count("move",objectdata)>0 { if position!=0 {position=0} if separator!=0 {separator=0} while (objectdata!="}") { separator=string_pos(",",objectdata); movedata[position]=string_copy(objectdata,string_pos("{",objectdata)+1,separator-1) objectdata=string_delete(objectdata,1,separator) position+=1 } }
} file_text_close(objectfile) }
J'soupçonne le file_text_readln, mais j'galère là _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 12:50 | |
| - Code:
-
while(!file_text_eof(objectfile)) { objectdata = file_text_read_string(objectfile) file_text_readln(objectfile) if( string_count("sprite",objectdata) ) { if position != 0 position = 0 if separator != 0 separator = 0 while (objectdata !="}") { separator = string_pos(",",objectdata); spritedata[position] = string_copy(objectdata,string_pos("{",objectdata)+1,separator-1) objectdata = string_delete(objectdata,1,separator) position += 1 } } if( string_count("move",objectdata) ) { if position!=0 position=0 if separator!=0 separator=0 while (objectdata!="}") { separator = string_pos("," , objectdata) //erreur corrigée ici movedata[position] = string_copy(objectdata, string_pos("{" , objectdata) + 1 , separator-string_pos("{" , objectdata)-1) objectdata = string_delete(objectdata, 1, separator) position += 1 } } } file_text_close(objectfile) |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 13:18 | |
| Rooohh, génial ça marche ! Merci Sinon, un dernier petit truc, dans ma ligne, j'dois tapper "command{a,b,c,d ,), si j'enlève la dernière virgule, il me met comme erreur - Code:
-
movedata[position]=string_copy(objectdata,string_pos("{",objectdata)+1,separator-string_pos("{" , objectdata)-1) ^ at position 15: Array index >= 32000 C'est un ptit détail, certes, mais si y'a un moyens de pouvoir virer c'te dernière virgule, ça serait cool Merci encore _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 13:37 | |
| ben t'as qu'a remplacer ton "}" par ",}" carrement dans le code. Tu lit ta ligne dans un string tu verifie que ",}" existe sinon tu remplace "}" par ",}" au moins tu n'as pas a changer ton code |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 13:43 | |
| J'me suis mal exprimé je crois Le command{a,b,c,d,} c'est dans le fichier texte, c'est le code qui a besoin d'être changer, parce qu'il a besoin d'un "," avant le "}", et j'arrive pas à changer ça.. C'que je veux c'est qu'on puisse écrire dans le fichier texte command{a,b,c,d} sans qu'il me renvoie une erreur.. _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 13:55 | |
| ben justement c'est ce que je t'ai dit, quand tu a lu ta chaine tu rajoute ta virgule pour qu'il n'y ais pas d'erreur - Code:
-
objectdata = file_text_read_string(objectfile) if( !string_count( ",}" , objectdata) ) string_replace(objetctdata, "}" , ",}" ) Faut pas ce prendre la tete |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 18:44 | |
| Hm.. ça marche pas La même erreur, j'ai placé - Code:
-
if !(string_count(",}",objectdata)) {string_replace(objectdata, "}" , ",}" )} juste en dessous de la ligne - Code:
-
objectdata=file_text_read_string(objectfile); Mais il me met la même erreur.. _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 19:09 | |
| c'est normal, string_replace retourne une chaine de caractere, une copie. Il ne modifie pas la variable entrée en parametres. - Code:
-
if !(string_count(",}",objectdata)) objectdata = string_replace(objectdata, "}" , ",}" ) |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Mer 14 Juil 2010 - 19:24 | |
| Roooh, ça marche, c'est parfait ! Merci pour tout ! _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 14:54 | |
| Hop, je reviens vous embêtez un peu Voilà, je voudrais pouvoir déclarer des variables stocké dans un fichier texte : le principe est simple, je scan mon fichier texte, il me stock dans un array chaque string (par exemple, j'ai dans mon fichier texte playerspeed=2, je stocke "playerspeed" dans playervar[0], et sa valeur dans playervalue[0]) Mais voilà, ça se complique : je voudrais transformer le string en variable, et lui assigner sa valeur. C'est à dire, déclarer des variables et assigner la valeur présente dans le fichier texte. le code du scanner : - Code:
-
playerfile=file_text_open_read(global.path+"\Content\Player"+string(global.Character)+"\Player.info") position=0 while (!file_text_eof(playerfile)) { playerdata=file_text_read_string(playerfile); file_text_readln(playerfile) playervar[position]=string_copy(playerdata,0,string_pos("=",playerdata)-1); playervalue[position]=real(string_copy(playerdata,string_pos("=",playerdata)+1,string_pos(";",playerdata)-string_pos("=",playerdata)-1)) position+=1; } file_text_close(playerfile)
j'ai tenté d'utiliser "var string(playervar[0])=real(playervalue[0])", mais il me dit qu'il aime pas les "[]".. aussi en stockant les variables et leur valeurs dans un ds_grid, mais.. marche pas :'( Merci de votre aide et bonne journée ! _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 15:01 | |
| variable_local_set( ton_tableau[i] , valeur ) |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 15:09 | |
| - onilink_ a écrit:
- variable_local_set( ton_tableau[i] , valeur )
AHH !! Parfait ça marche, merci dude ! Alors, dans le vif du sujet, je cherche à exporter les tiles de ma room dans un fichier texte, mon code me créait des lignes comme celle-ci "16,288,16,16,0,0", une ligne par tile_id scanné, dans lequel je stockait la position x & y du tile, et toutes les valeurs numériques nécessaires. Seulement, c'est que pour une room de 686*3250 (un truc comme ça), ça me créer des fichier de 90ko avec 3485 lignes, et j'ai l'impression de game maker ne peut pas lire plus de 345 lignes.. quelle logique puis-je attribuer pour qu'il me scanne chaque tile et me les replace dans un fichier sans pour autant qu'il soit si lourd (ou alors c'est normal :s), et que je puisse le charger sans trop de problème ? Merci encore pour tout _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 15:15 | |
| |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 15:28 | |
| - onilink_ a écrit:
- Va voir le script de sauvegardes de cartes de bibi et adapte le juste pour les tiles
https://cbna.forumactif.com/vos-projets-f11/super-room-io-engine-v2-t9921.htm Yup, j'avais vu ça, mais y'a des lignes de code que j'ai du mal à cerner comme celle là : - Code:
-
tmp = (data >> 24) | $80; Si tu pouvais m'éclairer sur le" >>24" et le "$80" - Code:
-
for (ID = 10000000;ID < 10050000;ID += 1) { if (!tile_exists(ID)) { continue; } // TILE LAYER : 4 BYTES SIGNED INTEGER data = tile_get_depth(ID); if (sign(data) = -1) { data = abs(data); tmp = (data >> 24) | $80; file_bin_write_byte(fid,tmp); } else { data = abs(data); file_bin_write_byte(fid,data >> 24); }
_________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 15:33 | |
| |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 15:47 | |
| _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 15:49 | |
| Si tu ne comprend pas quelque chose n'hésite pas a me demander |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 15:58 | |
| - onilink_ a écrit:
- Si tu ne comprend pas quelque chose n'hésite pas a me demander
Héhé, merci _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 16:36 | |
| Hm.. là j'commence à bloquer un peu Dans le code - Code:
-
file_bin_write_byte(mapsavefile,tile_get_left(ID)>>8); position+=1 file_bin_seek(mapsavefile,position); file_bin_write_byte(mapsavefile,tile_get_left(ID) & $FF); position+=1 file_bin_seek(mapsavefile,position); "file_bin_write_byte(mapsavefile,tile_get_left(ID)>> 8 )" ça veut dire qu'on va écrire sur 8 bytes la valeur "left" du tile en question, et le bin_seek permet de déplacer le curseur dans le fichier binaire, j'me trompe ? Pourquoi est ce qu'on va écrire "& $FF" dans le fichier, ça sert à quoi exactement ? _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 16:44 | |
| tu a lu mon tuto ?
>>8 va effectuer un décalage binaire, et &FF c'est pour ne garder que l'octet de poids faible d'une variable.
un décalage binaire >>8 décale d'un octet vers la droite, donc il detruit l'octet de poids faible de ta variable et decale les autres |
| | | Termite Utilisateur confirmé: Rang ****
Messages : 1005 Localisation : Dans ta charpente ! Projet Actuel : RayEngine 5.0
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante Ven 16 Juil 2010 - 21:42 | |
| - onilink_ a écrit:
- tu a lu mon tuto ?
>>8 va effectuer un décalage binaire, et &FF c'est pour ne garder que l'octet de poids faible d'une variable.
un décalage binaire >>8 décale d'un octet vers la droite, donc il detruit l'octet de poids faible de ta variable et decale les autres Hmm.. j'ai quand même un peu de mal à saisir le truc, enfin l'interêt d'effacer l'octet de poid faible, 'vais y réfléchir _________________ Because these are not the words of God, the same God that burnt the knowing.
|
| | | Contenu sponsorisé
| Sujet: Re: Tester la fin d'une ligne, puis lire la suivante | |
| |
| | | | Tester la fin d'une ligne, puis lire la suivante | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |