leer un archivo de texto en un array (file de 0 y 1)
Tengo un archivo de texto que contiene aleatorios de 0 y 1, y quiero leerlo en Matlab y obtener cada elemento en un array
gol : Tengo dos archivos de texto que quiero comparar y ver si son idénticos y cuánta diferencia hay, de hecho, los dos archivos son: 1) archivo original que envío a través de una línea de comunicación 2) el archivo recibido debe ser idéntico al archivo enviado
Ejemplo de mi código:
for i=1:1:size
if (send[i] ~= received[i]) error++;
end
pero necesito saber cómo obtener estos dos arrays de los archivos de texto, donde todos los "0" y "1" están en una línea
Pregunta hecha hace 3 años, 5 meses, 1 días - Por codesculptor3f6e
4 Respuestas:
-
Ya que quieres comprobar que el contenido de los dos archivos es el mismo, no creo que necesites preocuparte por el formato de sus contenidos o la secuencia de ceros y otros, deberían ser simplemente idénticos. Puede utilizar el siguiente código para leer todo el archivo de texto y almacenarlo en un
char
vector:C = char(join(readlines(filename), ''));
Para comparar el contenido de dos archivos y encontrar el porcentaje de error puede hacer lo siguiente:
act = char(join(readlines(actualfilename), '')); exp = char(join(readlines(expectedfilename), '')); err = (sum(act~=exp))/length(act);
Pero también debe detectar si dos archivos contienen diferentes caracteres:
act = char(join(readlines(actualfilename), '')); exp = char(join(readlines(expectedfilename), '')); al = length(act); % actual length el = length(exp); % expected length dl = abs(al-el); if (dl>0) ml = min(al, el); % min length act = act(1:ml); % shorten act if needed exp = exp(1:ml); % shorten exp if needed end err = (sum(act~=exp)+dl)/al % error
Tenga en cuenta que en el segundo caso, si un personaje se añade o se pierde en el centro del archivo, todos los caracteres posteriores serán considerados como error.
Respondida el Dec 16, 2020 a las 09:33 - por quantumquasar
Votos positivos: 0 | Votos negativos: 0 -
Lectura en los archivos de texto:
Si el archivo de texto está configurado con espacios o rupturas de línea:
Text.txt (rupciones en línea)
0 1 0 1 1
Texto.txt (espacios)
1 0 1 0 1 1
El escaneado en los datos se puede hacer utilizando el
fscanf()
función con especificación de formato%d
indicado para escanear en el archivo como enteros.File_Name = "Text.txt"; File_ID = fopen(File_Name); Binary = fscanf(File_ID,'%d');
Si el archivo de texto tiene los caracteres al lado/concatenados en la misma línea sin espacios:
Text.txt (línea single, sin espacios)
01011
Escanear el archivo de texto se puede hacer utilizando la especificación de formato,
%s
indicó leer el archivo como una cadena. Esta cadena se puede dividir y convertir en un array utilizandosplit()
,cell2mat()
ystr2num()
.split()
→ Se divide la cadena en un array celular con bits individuales/binarioscell2mat()
→ Convierte la matriz celular en una matriz de caracteresstr2num()
→ Convierte la matriz de caracteres en una matriz doble numéricaFile_Name = "Text.txt"; File_ID = fopen(File_Name); Binary = fscanf(File_ID,'%s'); Binary = split(Binary,''); Binary = str2num(cell2mat(Binary(2:end-1))).';
Comparando con Evaluar Cantidad de Errores:
La comprobación de errores se puede hacer comparando los arrays lógicamente en una forma basada en elementos. Luego usando el
nnz()
(número de no ceros) función podemos contar el número de veces que la condición es verdadera, "1". Aquí la condición es cuando las dos señales binariasBinary_1
yBinary_2
no iguales entre sí.Código Snippet:
Error = nnz(Binary_1 ~= Binary_2); Error
Full Script Option 1 (archivo de texto de rupturas/espacios):
File_Name = "Text_1.txt"; File_ID = fopen(File_Name); Binary_1 = fscanf(File_ID,'%d'); fclose(File_ID); File_Name = "Text_2.txt"; File_ID = fopen(File_Name); Binary_2 = fscanf(File_ID,'%d'); fclose(File_ID); clearvars -except Binary_1 Binary_2 Error = nnz(Binary_1 ~= Binary_2); Error
Full Script Option 2 (línea única, sin archivo de texto de espacios):
File_Name = "Text_1.txt"; File_ID = fopen(File_Name); Binary_1 = fscanf(File_ID,'%s'); Binary_1 = split(Binary_1,''); Binary_1 = str2num(cell2mat(Binary_1(2:end-1))).'; File_Name = "Text_2.txt"; File_ID = fopen(File_Name); Binary_2 = fscanf(File_ID,'%s'); Binary_2 = split(Binary_2,''); Binary_2 = str2num(cell2mat(Binary_2(2:end-1))).'; fclose(File_ID); clearvars -except Binary_1 Binary_2 Error = nnz(Binary_1 ~= Binary_2); Error
Ran utilizando MATLAB R2019b
Respondida el Dec 16, 2020 a las 09:40 - por quantumcoder403a
Votos positivos: 0 | Votos negativos: 0 -
Para leer un archivo de texto que contiene solo 0s y 1s en Matlab y guardarlos en un array, puedes utilizar la función
textread
de la siguiente manera:matlab % Leer el archivo de texto fileID = fopen('nombre_archivo.txt','r'); A = textread('nombre_archivo.txt','%s'); % Convertir de texto a un array de números array = str2double(A{1}); disp(array);
En este código, 'nombre_archivo.txt' debe ser reemplazado por la ruta y nombre de tu archivo de texto. El código leerá el archivo línea por línea y guardará cada línea como un string en la variable
A
. Luego, convertirá ese string a un array de números utilizando la funciónstr2double
, y lo guardará en la variablearray
.Para comparar dos archivos de texto y encontrar la diferencia entre ellos, puedes utilizar la función
isequal
en Matlab de la siguiente manera:matlab % Leer los dos archivos de texto file1 = textread('archivo_enviado.txt','%s'); file2 = textread('archivo_recibido.txt','%s'); % Comparar los dos archivos if isequal(file1, file2) disp('Los archivos son idénticos'); else error = sum(cellfun(@numel, regexp(file1{1},'1')) - cellfun(@numel, regexp(file2{1},'1'))); disp(['Los archivos son diferentes, con una diferencia de: ', num2str(error)]); end
En este código, 'archivoenviado.txt' y 'archivorecibido.txt' deben ser reemplazados por las rutas y nombres de tus archivos de texto respectivamente. La función
isequal
compara los dos archivos línea por línea y devuelve un valor lógico indicando si son idénticos o no. Si los archivos no son idénticos, calcula la diferencia en la cantidad de unos (1) en los dos archivos para mostrar cuánta diferencia hay entre ellos.Respondida el Dec 17, 2020 a las 09:32 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
2548d
Respondida el Dec 17, 2020 a las 09:39 - por Gemini
Votos positivos: 0 | Votos negativos: 0