Accès aux fichiers textes avec Unity.

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Accès aux fichiers textes avec Unity.

Message par ZJP » 04 Juil 2010 06:42

Salut,

Quelques exemples d'accès fichiers sous Unity3D.

JP

ReadFile

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO; 

public class ReadFile : MonoBehaviour 
{
	void Start () 
	{
		TextReader reader;
		string fileName = "fichier.txt";
		reader = new StreamReader(fileName);
		string result = reader.ReadToEnd();
		Debug.Log(result);
		reader.Close();
	}
}

ReadFileFloat

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO; 

public class ReadFileFloat : MonoBehaviour 
{
	void Start () 
	{
		TextReader reader;
		string fileName = "fichier.txt";
		
		reader = new StreamReader(fileName);
		string floatString = reader.ReadLine();
		//string result = reader.ReadToEnd();
		Debug.Log(floatString);
		reader.Close();
	}
	
}
ReadFileLines

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO; 

public class ReadFileLines : MonoBehaviour 
{
	void Start ()
	{
		string fileName = "fichier.txt";
		TextReader reader;
		reader = new  StreamReader(fileName);
		string line;
		while (true)
		{
            // lecture de la ligne
            line=reader.ReadLine();
            // si la ligne est vide on arrête
            if (line==null) break;
            // on affiche la ligne
            Debug.Log(line);
        }
        reader.Close();
	}
}
*************************************************************
Edit du 16/05/2016 à propos du ReadLine

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO;

public class ReadLine : MonoBehaviour
{
	public static string[] StockQuestion;
	void Start ()
	{
		string fileName = "fichier.txt";
		StockQuestion = File.ReadAllLines(fileName);
		Debug.Log(StockQuestion[0] + " " + StockQuestion[4]);
	}
}
*************************************************************


WriteAppendFile

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO; 
using System.Text;

public class WriteAppendFile : MonoBehaviour 
{
	void Start () 
	{
        TextWriter writer;                
        string fileName = "fichier.txt";
        writer =File.AppendText(fileName);               
        writer.Write("\r\nJ'ai envie\r\nd'ajouter du texte");               
        writer.Close();
	}
} 
WriteFile

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System.IO; 
using System.Text;

public class WriteFile : MonoBehaviour 
{
	void Start ()
	{
        TextWriter writer;
        string fileName = "fichier.txt";
		float f=12.58f;
        writer = new StreamWriter(fileName);
               
        writer.Write(f);
        writer.Close();     
	}
}
Dernière édition par ZJP le 16 Mai 2016 16:45, édité 1 fois.

Avatar de l’utilisateur
giyomuSan
Messages : 1799
Inscription : 09 Déc 2009 14:52
Localisation : Japon

Re: Accès fichiers avec Unity.

Message par giyomuSan » 04 Juil 2010 10:54

merci ZJP, c'est toujours les petits bout de code utile et qui evite de se creuser la tete ..parfois :mrgreen:

antho2b
Messages : 63
Inscription : 12 Juin 2010 19:09
Localisation : Nantes

Re: Accès fichiers avec Unity.

Message par antho2b » 13 Juil 2010 09:45

Au risque de paraitre inculte. C'est quoi de l'accés fichier? ça sert à quoi? à lire des fichiers qui sont pas dans l'arborescence des assets unity?
Merci de m'éclairer!

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Accès fichiers avec Unity.

Message par ZJP » 14 Juil 2010 01:30

Salut,

C'est un accès séquentiel aux fichiers de type texte. Cela permet par exemple de stocker (écriture) des informations (variables) dans un fichier et les retrouver (lecture) ensuite.
La lecture (ou l'écriture) est séquentielle, car pour atteindre, disons, la quatrième ligne (enregistrement) de ton fichier, il te faut lire les lignes précédentes. Dans un accès direct (ou aléatoire) genre base de données, tu peux accéder à tes datas (en lecture et ecriture) dans n'importe quel ordre. :D

JP

seb7000
Messages : 140
Inscription : 05 Mars 2010 17:51

Re: Accès fichiers avec Unity.

Message par seb7000 » 06 Sep 2010 10:26

Merci pour ces scripts.
Je code en javascript dans Unity, et je n'arrive donc pas à faire fonctionner ces scripts.
Pourriez vous m'indiquer la démarche à suivre pour mettre en place ces bouts de codes.
Merci pour votre aide

seb7000
Messages : 140
Inscription : 05 Mars 2010 17:51

Re: Accès fichiers avec Unity.

Message par seb7000 » 10 Sep 2010 16:20

Personne pour me donner un petit coup de main svp ?

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Accès fichiers avec Unity.

Message par ZJP » 10 Sep 2010 16:40

Salut,

Tu procèdes comme pour le JavaScript.

a) Création d'un GameObject
b) Création et saisie du script. La différence ici ( en C#) est que le nom de ton script DOIT être le même que le nom de la classe. Exemple : public class WriteFile : MonoBehaviour ", ton fichier DOIT s'appeler "WriteFile .cs"
c) Tu colles ton script à ton GameObject.

Voilà :D
Sinon, pour le Javascript, un recherche sur le forum officiel avec les mots StreamWriter et StreamReader import System.IO et import System.Text.


JP

Avatar de l’utilisateur
Lion
Messages : 39
Inscription : 15 Août 2010 00:18
Localisation : Strasbourg
Contact :

Re: Accès fichiers avec Unity.

Message par Lion » 11 Sep 2010 17:36

En JS, j'ai ce code

Code : Tout sélectionner

import System.IO;

static var assetFolder: String = "\\TDT Assets\\";

static function readFile( fileName: String ): Array // retourne les infos du fichier en argument dans un array
{
    var array = new Array();
    var file = new File.OpenText( Application.dataPath + assetFolder + fileName + ".txt" );
    var line = "";
    
    while( file )
    {
        line = file.ReadLine();
        
        if( line == "[endoffile]" )
            break;
        
        if( line == "" || line[0] == "*" )
            continue;
        
        array.Add( line );
    }
    
    file.Close();
    return array;    
}

static function writeFile( filePathAndName: String, lines: Array, doNotOverride: boolean )
{
    var sw : StreamWriter = new StreamWriter( Application.dataPath + assetFolder + filePathAndName + ".txt", doNotOverride );
    
    for( var i=0; i<lines.length ; i++ )
        sw.WriteLine( lines[i] );
    
    //sw.Flush();
    sw.Close();
}
Cela permet d'avoir des fichiers aérés mais aussi commentés puis que les lignes vides ou commençant par une étoile *ne sont pas prise en compte.
On arrête la lecture du fichier en écrivant "[endoffile]" à la fin.

Pour l'écriture, à quoi servirait Flush() ?
Amicalement, Lion :)
Mon Site
Convertisseur C# vers UnityScript (extension Unity3D).

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: Accès fichiers avec Unity.

Message par ZJP » 12 Sep 2010 02:12

Salut,

Le Flush() sert a "vider" le tampon d'écriture des octets restant non envoyés au fichier. Un vieux "relent" du DOS. A les joies du DTA et de l'INT 21 etc... :lol:

JP

seb7000
Messages : 140
Inscription : 05 Mars 2010 17:51

Re: Accès fichiers avec Unity.

Message par seb7000 » 14 Sep 2010 10:43

ZJP a écrit :Salut,

Tu procèdes comme pour le JavaScript.

a) Création d'un GameObject
b) Création et saisie du script. La différence ici ( en C#) est que le nom de ton script DOIT être le même que le nom de la classe. Exemple : public class WriteFile : MonoBehaviour ", ton fichier DOIT s'appeler "WriteFile .cs"
c) Tu colles ton script à ton GameObject.

Voilà :D
Sinon, pour le Javascript, un recherche sur le forum officiel avec les mots StreamWriter et StreamReader import System.IO et import System.Text.


JP
Merci pour ton aide, c'était effectivement le nom du fichier qui n'était pas correct

Répondre

Revenir vers « Scripting »