Dividir una cadena de caracteres<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />¡Hola! Quiero analizar una cadena de caracteres. Tengo 202 bits binarios en mi cadena y quiero cortar esa cadena por la mitad. Creo que podría encontrar la longitud de la cadena y tal vez hacer que devuelva los valores con una cierta cantidad de caracteres. Simplemente no estoy seguro de cómo usarlo para cortarlo por la mitad y tener dos columnas con 101 bits en cada una. Y después de entender eso, quiero separar cada bit en su propia columna. Entonces quiero 101 columnas de un '1' o un '0'. Simplemente no sé cómo analizarlo por número de caracteres.
¡¡Gracias por cualquier ayuda!!
Re: Dividir una cadena de caracteresGeneralmente existe una dependencia entre la forma en que se organizan sus datos y lo que una plataforma JMP le brindará (o no).
No estoy seguro de haber entendido completamente lo que buscas, pero si agregas este código al de Craige arriba, creo que te acercarás:
dt2 = dt << Transponer (
columnas ( :c1, :c2, :c3, :c4, :c5, :c6, :c7, :c8, :c9, :c10 ),
Tabla de salida ( "Transposición de ejemplo" )
);
dt2 << Generador de gráficos (
Mostrar panel de control( 0 ),
Variables(
X( :Etiqueta ),
Y(:Fila 1),
Y (: Fila 2),
Y (: Fila 3),
Y(:Fila 4),
Y( :Fila 5 )
),
Elementos( Posición( 1 , 1 ), Barra( X, Y, Leyenda( 12 ) ) ),
Elementos( Posición( 1 , 2 ), Barra( X, Y, Leyenda( 13 ) ) ),
Elementos( Posición( 1 , 3 ), Barra( X, Y, Leyenda( 15 ) ) ),
Elementos( Posición( 1 , 4 ), Barra( X, Y, Leyenda( 23 ) ) ),
Elementos( Posición( 1 , 5 ), Barra( X, Y, Leyenda( 27 ) ) )
);
Tendría que ajustar los valores en la columna 'Etiqueta' para que sean los voltajes, y podría hacerlo con 'Recodificar' o con un poco más de JSL. Una vez que tengas lo que quieres, puede ser que exista una manera más directa de llegar allí.
Re: Dividir una cadena de caracteres¡Gracias! Eso ayudó mucho. Desafortunadamente eso fue solo el comienzo de lo que quería hacer, y no estoy seguro de cómo hacer ese resto...
Entonces realmente necesito indicar qué mitad de la cadena estoy mirando. Las 100 filas de cadenas que estoy dividiendo son para los mismos datos, y todas las primeras mitades de cadenas tienen el mismo nombre, al igual que las segundas mitades. Y una vez que tengo eso necesito graficar ambas mitades por separado. Cuando intenté graficarlo manualmente en JMP, no resultó como esperaba. Como he hecho este análisis es a través de Excel porque me mostraba el gráfico como quería que fuera. Básicamente solo necesito todas las columnas nuevas en las que van los bits (en este caso son voltajes) a lo largo del eje x y los datos a lo largo del eje y.
El único problema es que no pude entender cómo hacerlo en JMP. ¿Alguna ayuda?
¡¡Muchas gracias!!
Re: Dividir una cadena de caracteresPrueba esto
// los datos de entrada son una cadena de caracteres 1 y 0 que representan bits
cadena = "11110000111000110010";
//dividir la cuerda en dos por la mitad
// esta subcadena comienza en el carácter 1 y abarca la mitad de su longitud
primera mitad = Substr(cadena, 1, Longitud(cadena) / 2);
// esta subcadena comienza justo después de la anterior y la
// la longitud implícita llega hasta el final
segunda mitad = Substr(cadena, 1 + Longitud(cadena) / 2);
// los bits 1 y 0 van uno por columna
ncols = Longitud (primera mitad);
// iniciar una mesa nueva
dt = Nueva tabla( "ejemplo" );
// agrega columnas con nombres como "c3" para cada bit
For( i = 1, i <= ncols, i++, // el operador || une dos cadenas
dt << Nueva columna( "c" || Char( i ) ) // i es un número, char forma una cadena
);
// crear una función auxiliar para agregar bits a una fila en dt
adddata = Función( {bits}, // parámetro para funcionar
{i, c}, // variables locales
dt << addrows( 1 ); // la función sabe usar dt
Para (i = 1, i <= Longitud (bits), i++,
c = Columna( dt, "c" || Char( i ) ); // lo mismo que arriba
dt:c = Núm( Substr( bits, i, 1 ) ); // poner bit en la columna
);
);
// cada llamada a adddata pone una fila de bits en dt
agregar datos (primera mitad);
agregar datos (segunda mitad);
agregardatos( "1010101010" );
agregar datos ("1111111111");
agregardatos( "0000000000" );
