Problema al escribir string en archivo

jor1980 - 24/01/2010 20:12
Hola estoy tratando de crear un script, que lo primero que hace es ecribir una cadena de texto en un archivo, esta cadena de texto debería terminar un salto de línea, pero no sé cómo hacer esto con Maxscript, lo que hace es terminarme las cadenas siempre con un 0, se me ocurrió mover el seque del archivo a la posición antes del 0 y escribir un short que representa el salto de línea, pero ahora si abro el archivo con un editor hexadecimal en vez de terminar con od oa.

Que es el salto de línea en hexa termina con od od oa.

Alguien me puede orientar:
Aquí el código:
Filename=getsavefilename caption:save as type:cf file|*.cf filename:*.cf.

Thefile= fopen filename wt.
Writestring thefile //ciber face converter file (c)2009 by jor1980.

Fseque thefile -1 #sek_current.
Writeshort thefile 2573 #signed.

Fclose thefile.
Ruramuq - 25/01/2010 12:59
Eso suena a archivo binario, pero usa string/stringstreams.
[code]ru = createfile (getsavefilename caption:save as types:cf file (*.cf)|*.cf).

Format //ciber face converter file (c)2009 by jor1980\n\nTo:ru.

Close ru[/code]
\nPara newline, como en notepad.
\r para carriage return, como en Wordpad.

Revisa los temas de string, stringstream, filestream en mxs help.
jor1980 - 25/01/2010 14:03
Muchas gracias, con es me funciona. Ahora necesitaría acceder desde el script a una escena y poder extraer su nombre y todas las mallas que contiene.

Me puedes orientar un poco?
Estoy usando lo siguiente para acceder a los objetos:
Objetos=objects.

For object in objetos do.
(Format object, name to:thefile).

El problema es que esto me escribe el nombre de todos, y yo sólo quiero que me escriba el nombre del primero, probé esto:
Format objetos[1].name to:thefile.

Pero no es valido.
Ruramuq - 25/01/2010 19:40
Tienes que revisar bien los topics de Maxscript en el archivo de ayuda. De la manera en que estas aprendiendo solo te vas a complicar.

Revisa los topics de arrays, objectsets, for loops, filestream[/i] y con pequeñas pruebas ve cómo funcionan.

Date cuenta que cuando creas un archivo, max lo abre, es decir le pide acceso a Windows, pero luego uno siempre debe cerrarlo cuando ya no se necesite hacer nada con ese archivo:
close [/i].

Una vez cerrado ya no puedes escribir nada en él, hasta que lo vuelvas a abrir con openfile[/i].

También revisa lo que encuentres acerca de variables:
local and global variables.

Variable assignment[/i].
jor1980 - 25/01/2010 23:05
Al final logré completar el script, sólo que ahora el problema que tengo es cuando algún vértice de la malla tiene valores muy grande ya que en mí archivo de texto aparecen de la siguiente forma:
-6.67578e+008.

Necesito solventar esto y el script estará terminado, alguna idea de cómo hacerlo?
Os dejo el script para que podáis revisarlo.

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #122004

Ruramuq - 26/01/2010 01:50
Tienes double, integer64 [/i]para que sean más precisas tus operación. En el caso de float extraes los enteros del número y los añades a un string y luego los decimales, estos decimales los vas convirtiendo a enteros de uno en uno moviendo el punto decimal al multiplicarlos * 10 y los vas añadiendo al mismo string.
7.523 extraes entero >> 7.
523 * 10 = 5.23 > extraes entero > 5.

Append 7. 5 > 7.5.

Repites de nuevo:
5.23 >>.23 > 2.3 > 2 >> append 7.5 2 >> 7.52.

Dependiendo de cuan largo sea el loop llega un momento donde solo obtienes ceros.

Y también tienes
formattedprint[/i].
jor1980 - 26/01/2010 12:24
Gracias, tengo que revisarlo bien porque no entiendo cómo extraes el entero y tengo el problema de que e no aparece siempre elevado al mismo número, te subo aquí el archivo que exporto con el script que subí antes para que lo veas por ti mismo junto con el archivo que resulta al exportar, puedes ver lo que te digo abriendo el archivo exportado con editor hexadecimal.

Muchas gracias por todas las molestias.

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #122046

Ruramuq - 26/01/2010 16:27
Son números demasiado grandes, pero bueno, te pongo un ejemplo:
[code](tfn parsenumbers Vec = t(t local str= local Vec=#(vec.x as double, EC, y as double, EC, z as double) for s in 1 todo 3 do (t append str (formattedprint Vec[s] format.18g) append str ) str t) tlocal sstr = stringstream 3dpoder mxs \r tlocal Faces tskiptonextline sstr tfor o in objects do t(t for v in 1 todo getnumverts o do format ((parsenumbers (getvert $ v)) +\n) to:sstr for i=1 todo getnumfaces o do (t Faces=getface o i format % % %\nFaces.x Faces, y Faces, z to:sstr ) t) tsstr.
)[/code]
jor1980 - 26/01/2010 17:09
Muchas gracias por todas las molestias, al final he usado formattedprint y creó que me funciona, por lo que ha salvo de encontrar algún error inesperado el script esta terminado.

Me has ahorrado muchísimo tiempo tratando de buscar solución a mis problemas.

Valoro mucho tu ayuda, un saludo.
Ruramuq - 26/01/2010 18:58
No es molestia, al contrario, sé que me va a servir el pensar en estas cosas.
Miguel-Arte-3D-1990 - 04/07/2011 23:49
Hola me podrían explicar que es un string, tengo un ejemplo que contiene varios string. Y espero su ayuda y luego les mando el ejemplo ok. Gracias.
jmpinero - 07/07/2011 15:25
Soy prácticamente nuevo en el mundo de la programación, además de autodidacta, si me equivoco, que alguien me corrija. Un string es una cadena te texto, ejemplo:
A = hola.

Hola es string y a es una variable. Así que podríamos decir que una cadena de texto no es más que un texto.

Los string se forman poniendo un texto entre comillas.