Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: KsCorrales en Abril 09, 2016, 05:06:28 PM

Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 09, 2016, 05:06:28 PM
la pregunta lo dice he estado indagando bastante y todos los ejemplos códigos y demas encontrado no funcionan,cabe recalcar que no soy nuevo en esto xD pero es muy raro intente con varios ejemplos como:
http://sushanta1991.blogspot.com.co/2015/02/how-to-write-data-to-csv-file-in-unity.html

o la primera respuesta de esta 

http://answers.unity3d.com/questions/275960/newbie-simple-script-to-check-excel-file-to-dispal.html

y no edita el csv no se que hacer alguien ha hecho algo similar, algun tutorial o algo ?
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 09, 2016, 06:19:09 PM
logre hacerlo pero no guarda el archivo en android :s alguna idea? le quite el aplication.datapath ya que no quiero que me lo guarde en esa carpeta pero igual no lo guarda en ningún sitio (utilice el buscador)
Título: unity3d escribir o editar un CSV
Publicado por: isai en Abril 09, 2016, 06:31:57 PM
podrias usar Application.persistentDataPathque no te lo guarda en la carpeta del juego por ejemplo en windows lo guarda en C:\Users\user\AppData\LocalLow\nombredelacompañia 
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 09, 2016, 06:38:21 PM
buena idea pero necesito que no quede en una ruta profunda ni nada de eso, es decir que quede en una carpeta en el root del dispositivo tipo /csv o algo asi pero no funciona :s y pues ahi estoy mirando como hago 
Título: unity3d escribir o editar un CSV
Publicado por: isai en Abril 09, 2016, 06:45:05 PM
[quote author=KsCorrales" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35605" data-ipsquote-contentcommentid="129373">buena idea pero necesito que no quede en una ruta profunda ni nada de eso, es decir que quede en una carpeta en el root del dispositivo tipo /csv o algo asi pero no funciona :s y pues ahi estoy mirando como hago [/quote]encontre esto por ahi  Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 09, 2016, 06:59:09 PM
nada ni con persistent ni con datapath segun lei era de permisos la idea es guardar en el dispositivo interno como es posible que no funcione es que no entiendo :v
debuguee el aplication.datapath y el no añade el slash entonces 

return Application.dataPath + "/Saved_data.csv";

tambien

return Application.dataPath + "/" + "Saved_data.csv";

y tambien

return Application.dataPath + "Saved_data.csv";

lo mismo con persistent data pero nada no se que hacer >:c
Título: unity3d escribir o editar un CSV
Publicado por: isai en Abril 09, 2016, 07:10:19 PM
[quote author=KsCorrales" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35605" data-ipsquote-contentcommentid="129375">
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 09, 2016, 07:47:46 PM
yo tambien supuse que el primero, ya que debuguee el datapath pero cuando compilo y ejecuto en la tablet el archivo no lo crea :c y en el editor si lo crea y lo edita no se
nada no se que hacer, ni con esta solucion que dan ahí 

http://answers.unity3d.com/questions/854658/android-persistent-data-loading-fails.html
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 09, 2016, 10:12:20 PM
A ver. Yo tengo una bbdd en StreamingAssets que copio al Persistent siempre al inicio de la app, que es para Android. A mí me funciona perfectamente.Yo hago esto:string filepath = string.Format("{0}/{1}", Application.persistentDataPath, DBName);
Db...
File.WriteAllBytes(filepath, loadDb.bytes);Y como permisos de app, Write Access = Internal Only. 
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 09, 2016, 10:19:49 PM
a ver lo que yo necesito es guardar un simple csv apartir de un formulario, y ya, no necesito una base de datos no es posible guardarlo internamente?, osea el ya esta guardandolo y sobreescribiendolo, en el editor funciona muy bien pero en adroid he probado de 10mil maneras y nada, segun lei por seguridad o algo asi no se permite crear archivos que no sean fotos en el almacenamiento interno. no se si sea mentira :s
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 09, 2016, 10:27:35 PM
Que no digo que pongas una bbdd. Es el ejemplo. Lee hombre. No creo que una bbdd sean fotos, vamos. Es un archivo.Pero en fin, cada uno a lo suyo.
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 11, 2016, 03:28:40 PM
@iRobb lo que pasa es que yo no he tocado mucho eso ni c# mmmmm mira es que segun creo como lo tengo deberia funcionar,
 
StringBuilder sb = new StringBuilder();
   
   for (int index = 0; index < length; index++)
   sb.AppendLine(string.Join(delimiter, output[index]));
   string filePath = getPath();
   StreamWriter outStream = System.IO.File.AppendText(filePath);
   outStream.WriteLine(sb);
   outStream.Close();
   Debug.Log ("saved");
bueno mirare esa manera de hacerla tuya para ver si lo logro hacer, muchas gracias :3
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 11, 2016, 04:49:06 PM
Te doy más detalles, ya que depende de donde de guardes los archivos. Me explico:Si lo guardas en persistentDataPath, con los permisos de internalOnly son suficientes, peeeerooo si creas subcarpetas dentro de persistentDataPath y guardas dentro, entonces necesitarás ExternalSD como permisos.Donde tienes en tu código el directorio donde guardas? ese getPath() que tiene?
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 11, 2016, 05:09:08 PM
private string getPath(){
   #if UNITY_EDITOR
   return Application.dataPath +"/CSV/"+"Saved_data.csv";
   #elif UNITY_ANDROID
   return Application.persistentDataPath + "/"+ "Saved_data.csv";
   #elif UNITY_IPHONE
   return Application.persistentDataPath + "/"+"Saved_data.csv";
   #else
   return "/"+"Saved_data.csv";
   #endif
   Debug.Log ("get path leido");
}
mmmm probe de nuevo con un codigo de prueba con hello world y nada :s en el buscador de la tablet no lo guarda empiezo a pensar que tiene que ver con permisos o algo asi, porque supuestamente a todo el mundo le funciona menos a mi ¬_¬ o no se si sea el csv, aunque un csv es como texto plano pero no se

 
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 11, 2016, 06:48:31 PM
Vamos a ir por pasos. Ese csv, de donde viene? Es decir, en el código del StringBuilder, ya lo das por creado sino entiendo mal. Pero donde se crea? O de donde viene?
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 11, 2016, 07:13:07 PM
mmmmm baia osea en el editor, el crea el archivo, en android debe existir el archivo?, no sabia que debía ser así, o si lo debe crear?

este es el codigo de ejemplo entero:

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

public class crearinscripcion : MonoBehaviour {

public Dropdown dia;
public Dropdown mes;
public Text ano;
public Text nombre;
public Dropdown genero;
public Text edad;
public Text email;
public Toggle recordatorio;
public Toggle promociones;
public byte[] saveData;


private List<string[]> rowData = new List<string[]>();


// Use this for initialization
void Start () {

}

void Update(){
   Debug.Log (Application.persistentDataPath);
   Debug.Log("valor dia: " + dia.value);
   Debug.Log("valor mes: " + mes.value);
   Debug.Log("valor año: " + ano.text);
   Debug.Log("valor nombre: " + nombre.text);
   Debug.Log("valor genero: " + genero.value);
   Debug.Log("valor edad: " + edad.text);
   Debug.Log("valor email: " + email.text);
   if (recordatorio.isOn) {
      Debug.Log ("valor recordatorio: es activo");
   } else {
      Debug.Log ("valor recordatorio: es inactivo");
   }
   if (promociones.isOn) {
      Debug.Log ("valor promociones: es activo");
   }else {
      Debug.Log ("valor promociones: es inactivo");
   }
}

public void Save(){
   
   // Creating First row of titles manually..
   string[] rowDataTemp = new string[9];
   rowDataTemp[0] = "dia";
   rowDataTemp[1] = "mes";
   rowDataTemp[2] = "ano";
   rowDataTemp[3] = "nombre";
   rowDataTemp[4] = "genero";
   rowDataTemp[5] = "edad";
   rowDataTemp[6] = "email";
   rowDataTemp[7] = "recordatorio";
   rowDataTemp[8] = "promociones";
   rowData.Add(rowDataTemp);
   
   // You can add up the values in as many cells as you want.
      rowDataTemp = new string[9];
      rowDataTemp[0] = dia.value.ToString();
      rowDataTemp[1] = mes.value.ToString();
      rowDataTemp[2] = ano.text;
      rowDataTemp[3] = nombre.text;
      rowDataTemp[4] = genero.value.ToString();
      rowDataTemp[5] = edad.text;
      rowDataTemp[6] = email.text;

      if (recordatorio.isOn) {
         rowDataTemp[7] = "acepto";
      } else {
         rowDataTemp[7] = "no acepto";
      }

      if (promociones.isOn) {
         rowDataTemp[8] = "acepto";
      }else {
         rowDataTemp[8] = "no acepto";
      }
      
      rowData.Add(rowDataTemp);

   string[][] output = new string[rowData.Count][];
   
   for(int i = 0; i < output.Length; i++){
      output = rowData;
   }
   
   int     length         = output.GetLength(0);
   string     delimiter     = ";";
   
   StringBuilder sb = new StringBuilder();
   
   for (int index = 0; index < length; index++)
   sb.AppendLine(string.Join(delimiter, output[index]));
   string filePath = getPath();
   StreamWriter outStream = System.IO.File.AppendText(filePath);
   outStream.WriteLine(sb);
   outStream.Close();
   Debug.Log ("saved");

}

// Following method is used to retrive the relative path as device platform
private string getPath(){
   #if UNITY_EDITOR
   return Application.dataPath +"/CSV/"+"Saved_data.csv";
   #elif UNITY_ANDROID
   return Application.persistentDataPath + "/"+ "Saved_data.csv";
   #elif UNITY_IPHONE
   return Application.persistentDataPath + "/"+"Saved_data.csv";
   #else
   return "/"+"Saved_data.csv";
   #endif
   Debug.Log ("get path leido");
}

}
 
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 11, 2016, 07:46:17 PM
Sin ver el código por lo que dices. Ya veo el error de concepto.Coloca el archivo en StreamingAssets, peeeeeroooo tienes que copiarlo tú a PersistentDataPath a menos que estés en el Editor. Ahora bien, que pasa aquí. Qué cada persistent es diferente por plataforma. En tu caso, si tienes que copiar de Streaming a Persistent en Android, no sé si sabes que en Android el apk se trata como el paquete jar, por tanto el StreamingAssets en android es:pathSource = "jar:file://" + Application.dataPath + "!/assets/" + fileName;pero esto realmente se debe tratar como si fuera un archivo externo de tipo WWW. Por tanto, para recuperar el archivo y copiarlo, debes hacer:            WWW www = new WWW(pathSource);el proceso típico de recuperación por WWW con un while is done, bla bla y finalmente lo guardas así:                        File.WriteAllBytes(pathTarget, www.bytes);Donde pathTarget es el persistentDataPath.  
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 11, 2016, 09:50:04 PM
wow muchas gracias por el apoyo, a ver según entiendo hay que al iniciar la app, coger y copiar de streaming assets al persistent data, 

 
#if UNITY_ANDROID
      pathSource = "jar:file//" + Application.dataPath + "!/assets/" + "Saved_data.csv";
      WWW www = new WWW(pathSource);
      while(!www.isDone){
         Debug.Log("Downloading... "+ www.progress);
      }
      Debug.Log("Download: " + www.progress);
      pathTarget = Application.persistentDataPath + "/"+ "Saved_data.csv";
      File.WriteAllBytes(pathTarget, www.bytes);
   #endif
hace rato no tocaba unity3d, ya que yo soy mas de backend :3 jajajajaja pero cuando yo le doy al writeAllByts ese pathTarget ese solo la ruta o con el nombre incluido? xD es que aun no me funciona, otra cosa esto lo puse en la función start, ahí debería estar no?, una vez ya esta hecho esto, con el boton procedo a realizar lo mio es decir en mi función save(). o no si se use mal la clase WWW. ya que nunca la había usado ajjaja me toco investigar :v
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 12, 2016, 03:00:14 AM
Vaya. Pensaba que sabías como iba la www. Ponla en una coroutine (si?) y el while con un yield. Comprueba si hay error del www que eso no tiene nada que ver con Unity, sino con el código.
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 18, 2016, 10:50:16 PM
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35605" data-ipsquote-contentcommentid="129521">Vaya. Pensaba que sabías como iba la www. Ponla en una coroutine (si?) y el while con un yield. Comprueba si hay error del www que eso no tiene nada que ver con Unity, sino con el código.[/quote]No estoy muy familiarizado a hacer este tipo de cosas en unity, lo siento :v estuve indagando un poco sobre el www y pues la mayoria no usan una corrutina, vi que alguien hacia algo similar a lo que comentaste arriba en un comentario con uan base de datoseste es el enlace: http://answers.unity3d.com/questions/126578/how-do-i-get-into-my-streamingassets-folder-from-t.html

y aqui la corrutina, pero igual no funciona :v me ayudas? XD o tienes algun sitio donde explique esto, en la doc no dice nada.
IEnumerator DataSaved()
    {
        pathSource = "jar:file//" + Application.dataPath + "!/assets/" + "Saved_data.csv";
        WWW www = new WWW(pathSource);
        while(!www.isDone){
            yield return www;
        }
        pathTarget = Application.persistentDataPath + "/"+ "Saved_data.csv";
        File.WriteAllBytes(pathTarget, www.bytes);
    } 
 
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 18, 2016, 10:56:03 PM
Así a bote pronto parece que está bien. Qué error te da?Te escribe el archivo con 0 bytes o no te escribe nada de nada?Recuerdas lo de los permisos? Si escribes en el persistent, ponle Internal Only en el Write Access de los player settings.
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 18, 2016, 10:59:05 PM
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35605" data-ipsquote-contentcommentid="129856 date=1461012963]Así a bote pronto parece que está bien. Qué error te da?Te escribe el archivo con 0 bytes o no te escribe nada de nada?Recuerdas lo de los permisos? Si escribes en el persistent, ponle Internal Only en el Write Access de los player settings.[/quote]mmmm asi no pasa nada, como puedo debuguearlo en android directamente, el remote no sirve para nada, y pues principalmente, la carpeta con el bundle identifier no la crea, entonces no se que hacer, uso el buscador de la tablet y tampoco
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 18, 2016, 11:02:46 PM
Espera, dame un minuto.
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 18, 2016, 11:05:22 PM
es que es muy raro porque instalo la app, pero en android -> data no se crea la carpeta de la app com.nombre.producto, pues ahí irían los nombres de mi app eso esta hecho bien, y esta en internal, mmm intente exportarlo como proyecto android y abrir en eclipse, y después debuguear directamente, pero me saltaron muchas alertas y desiste por eso, le arregle un par y salían mas :v jajajajaja entonces ni idea. con un debug directo en android creo que ya me podría defender jajajajjaja tu como debugueas?
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 18, 2016, 11:40:57 PM
Subiendo...
TestAndroidAccess.rar
Es que no siempre vas a poder ver la estructura de dirs en Android por seguridad.Tienes que abstraerlo. Este proyectito te copia el fichero csv, y comprueba que existe. El text te devolverá true/false si lo ha encontrado o no.Recuerda que, en el while del www, habría que añadir un timeout por precaución.
Lo he probado y me devuelve true.
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 18, 2016, 11:50:32 PM
aaaaaa el debug lo haces a mano jajajaj ok yo me referia a un debug debug jajajajjaja voy a probrar y te aviso, muchas gracias enserio
mmmmm baia empiezo a creer que es la tablet, me aparece todo bien, como si hubiera salido todo perfecto, pero no esta el archivo ni siquiera hay carpeta con el nombre del bundle identifier que supuestamente el archivo debe ir ahí no? pues tengo entendido eso, voy a mirar bien en las opciones de la tablet, y a probar en otros dispositivos.
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 19, 2016, 12:00:22 AM
No creas, yo tampoco veo este proyecto en este caso. Los otros sí, aunque son mucho más grandes.Prueba de abrir desde código el archivo csv y toquetearlo y ver si te guarda datos.
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 19, 2016, 12:12:49 AM
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35605" data-ipsquote-contentcommentid="129863 date=1461016822]No creas, yo tampoco veo este proyecto en este caso. Los otros sí, aunque son mucho más grandes.Prueba de abrir desde código el archivo csv y toquetearlo y ver si te guarda datos.[/quote]mmmmmm acabo de hacerlo y nada, creí que iba a servir cuando abrí el archivo a código y me salieron números raros y pues lo abrí  en excel y me decía que el archivo estaba dañado, ok entonces lo que hice fue llenar 3 celdas y guardar  como csv, después de esto lo mire desde el código y quedaba bien separado por comas, pero aun así en el dispositivo no lo guarda :s no aparece ni con el buscador de android ni metiéndome a los archivos desde windows jajajajjajaja :S debe ser la tablet si o si creo
Es una samsung galaxy tab E
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 19, 2016, 12:20:48 AM
Bueno es que el csv que te puse me lo inventé. No tenia nada o basura. Pero no te preocupes, de verdad no es de tu tablet. Si no lo tienes "rooted" pasa.
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 19, 2016, 12:24:50 AM
jajajajajjajajaajajaj hubieras empezado por ahi :S jajajaj entonces no hay manera de crear el archivo sin root ? ,

yo estaba probando con 

http://docs.unity3d.com/ScriptReference/Application-streamingAssetsPath.html (http://docs.unity3d.com/ScriptReference/Application-streamingAssetsPath.html)

por si acaso, pero da el mismo resultado, done pero no lo crea
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 19, 2016, 12:49:34 AM
Pero puedes acceder a él, cierto? O sea lo puedes abrir. Si no el código lo he hecho mal.El tema es que no lo puedes ver directamente en el dispositivo.
Pero desde Unity sí, cierto?
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 19, 2016, 12:50:53 AM
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35605" data-ipsquote-contentcommentid="129867 date=1461019774]Pero puedes acceder a él, cierto? O sea lo puedes abrir. Si no el código lo he hecho mal.El tema es que no lo puedes ver directamente en el dispositivo.[/quote]mmmmmm si osea de acceder si accede porque pues segun lo que habia hecho mas e lejemplo que me pasaste si accede, el problema es que la idea era sobreescribir y sobreescribir para tener unos datos en ese csv 
despues de eso poder sacar ese csv del dispositivo como un archivo comun.
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 19, 2016, 12:54:58 AM
A ver, es cierto. Yo estoy en un proyecto y los veo perfectamente. Por qué este no? Déjame mirar diferencias.
Ya lo he visto!
1. Tenemos un error en el while!!!!!
        while (!www.isDone) {
            yield return null;
        }
2. Crea el proyecto con Write Access External SD. Luego se puedo revertir a internal en la versión de producción, pero eso hace que cree las estructuras y sean visibles en ese dispositivo.   
Título: unity3d escribir o editar un CSV
Publicado por: KsCorrales en Abril 19, 2016, 02:47:08 PM
mmmm entonces tiene que devolver null si no ha terminado, bueno ya lo corrijo pero la segunda parte no la entendi, osea creo un proyecto con la opcion de escritura externa, y luego como la revierto?
Título: unity3d escribir o editar un CSV
Publicado por: francoe1 en Abril 19, 2016, 04:39:36 PM
Fijate si creando un TXT dentro de la carpeta Resources te da los permisos luego en la instalación de Android.
Título: unity3d escribir o editar un CSV
Publicado por: iRobb en Abril 19, 2016, 06:30:19 PM
[quote author=KsCorrales" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35605" data-ipsquote-contentcommentid="129881 date=1461070028]mmmm entonces tiene que devolver null si no ha terminado, bueno ya lo corrijo pero la segunda parte no la entendi, osea creo un proyecto con la opcion de escritura externa, y luego como la revierto?[/quote]El mismo proyecto. Pon como external, compila y ejecuta en el dispositivo entonces te creará las estructuras visibles.Luego, si quieres, lo puedes revertir a internal otra vez o no.