Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

unity3d escribir o editar un CSV

Iniciado por KsCorrales, Abril 09, 2016, 05:06:28 PM

Tema anterior - Siguiente tema
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");
}

}
 

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.  

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

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.

Abril 18, 2016, 10:50:16 PM #19 Ultima modificación: Abril 18, 2016, 10:57:30 PM por KsCorrales
[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">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);
    } 
 

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 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


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?

Subiendo...
http://unityspain.com/applications/core/interface/file/attachment.php?id=9499">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.

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.

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 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

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.

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

por si acaso, pero da el mismo resultado, done pero no lo crea

Etiquetas: