Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 从文件中输出莫尔斯电码_Matlab - Fatal编程技术网

Matlab 从文件中输出莫尔斯电码

Matlab 从文件中输出莫尔斯电码,matlab,Matlab,我的程序应该读取一个文本文件并以摩尔斯电码输出 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function morse(filename) % MORSE converts text morse code and writes it to a file % Defining Characters & Numbers A = ['.-']; B = ['-...']; C = ['-.-.']

我的程序应该读取一个文本文件并以摩尔斯电码输出

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function morse(filename)

% MORSE converts text morse code and writes it to a file



% Defining Characters & Numbers
    A = ['.-'];
    B = ['-...'];
    C = ['-.-.'];
    D = ['-..'];
    E = ['.'];
    F = ['..-.'];
    G = ['--.'];
    H = ['....'];
    I = ['..'];
    J = ['.---'];
    K = ['-.-'];
    L = ['.-..'];
    M = ['--'];
    N = ['-.'];
    O = ['---'];
    P = ['.--.'];
    Q = ['--.-'];
    R = ['.-.'];
    S = ['...'];
    T = ['-'];
    U = ['..-'];
    V = ['...-'];
    W = ['.--'];
    X = ['-..-'];
    Y = ['-.--'];
    Z = ['--..'];
    period = ['.-.-.-'];
    comma = ['--..--'];
    question = ['..--..'];
    slash_ = ['-..-.'];
    n1 = ['.----'];
    n2 = ['..---'];
    n3 = ['...--'];
    n4 = ['....-'];
    n5 = ['.....'];  
    n6 = ['-....'];
    n7 = ['--...'];
    n8 = ['---..']; 
    n9 = ['----.'];
    n0 = ['-----'];

    text = upper(text);
    vars ={'period','comma','question','slash_'};
    morsecode=[];
    for i=1:length(text)
        if isvarname(text(i))
        morsecode = [morsecode;eval(text(i))];
        elseif ismember(text(i),'.,?/')
            x = findstr(text(i),'.,?/');
            morsecode = [morsecode;eval(vars{x})];
        elseif ~isempty(str2num(text(i)))
            morsecode = [morsecode;eval(['n' text(i)])];
        elseif text(i)==' '
            morsecode = [' '];
        end
        morsecode = [morsecode;eval(text(i))];
    end
     code = morsecode;
    if exist('file','var')
        fprintf(code, '%c')
    end

您可以使用该函数开始。不过,你最好先做经期检查,否则你最终会替换已经使用摩尔斯电码的部分字母

例如:

testString = sttrep('ABCD','A','.-');

将导致
testString='.-BCD'

尽管有一个可怕的问题,但这是一个很好的项目,让我思考:如何以优雅的方式实现文本到莫尔斯的转换。这不可避免地导致我实现了以下功能(OP:从我的拙劣代码中学习)

imo最有趣的地方是使用and的一行代码(如果要调试每个步骤,请使用中间变量将代码拆分为多行)

text2morsefile.m:

函数text2morsefile(txt,文件名)
fid=fopen(文件名,'w');
fprintf(fid,text2morse(txt));
fclose(fid);
终止
函数m=text2morse(str)
m=cell2mat(arrayfun(@char2morse,str,'uni',false));
终止
函数m=char2morse(ch)
持久性莫尔斯图;
如果是空的(morsemap)
morsemap={'','-.-.-','.-.-.-'',NaN,'.-.-','.-.''.-','.-.'.-.'.-.'.-','.-.'.-.'.-.''.-.'.-.'.-.',。。。
",","男","男","男","男","男","男","男","男,。。。
'-----', '.----', '..---', '...--', '....-', '.....', '-....', '--...',...
"--…","--…","--…",,。。。
'.--.-.', '.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..',...
'.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...',...
“-”、“…-”、“…-”、“.-”、“-…-”、“-…-”、“-…”、“-…”,楠,楠,楠,“…-”;
终止
%为非莫尔斯字符指定字符:
丢失莫尔斯符号=“”;
ch=双(上(ch));
m=NaN;

如果ch>=32&&chOk-那么你的问题是什么?它做了什么你不期望的事情?你的输入文件是什么?这是
eval
isvarname
的一些讨厌的用法,你最好使用ascii值和单元格数组来存储莫尔斯电码或使用a,你的问题是,“你怎么可能写得更差?”开玩笑,但这里完全没有必要使用eval。冈瑟是对的。只是出于好奇:如果你几乎没有Matlab知识,为什么要用它来做这样的项目呢;将点和破折号作为声音播放会有那么困难吗?最初的问题是写一个文本文件(这也是OP的代码试图做到的)。将其作为声音播放只是一个额外选项,可以轻松地添加到
char2morse
函数的末尾
function text2morsefile(txt,filename)
    fid = fopen(filename,'w');
    fprintf(fid,text2morse(txt));
    fclose(fid);
end
function m = text2morse(str)
    m=cell2mat(arrayfun(@char2morse,str,'uni',false));
end
function m = char2morse(ch)
    persistent morsemap;
    if isempty(morsemap)
        morsemap ={'   ','-.-.--', '.-..-.', NaN, '...-..-', NaN, '.-...', '.----.',...
            '-.--.', '-.--.-', NaN, '.-.-.', '--..--', '-....-', '.-.-.-', '-..-.',...
            '-----', '.----', '..---', '...--', '....-', '.....', '-....', '--...',...
            '---..', '----.', '---...', '-.-.-.', NaN, '-...-', NaN, '..--..',...
            '.--.-.', '.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..',...
            '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...',...
            '-', '..-', '...-', '.--', '-..-', '-.--', '--..', NaN,NaN,NaN,NaN,'..--.-'};    
    end
    % specify char for non-morse character:
    missingmorse_symbol = '';
    ch = double(upper(ch));
    m = NaN;
    if ch>=32 && ch<=95
        m = morsemap{ch-31};
    end
    if isnan(m)
        m = missingmorse_symbol;
    else
        % might add extra space between characters?
        m = [m ' '];
    end
end