MATLAB — чтение слов в файле в обратном порядке

Опубликовано: 10 Января, 2023

MATLAB расшифровывается как Matrix Laboratory. Это высокопроизводительный язык, который используется для технических вычислений. Это позволяет манипулировать матрицами, отображать функции, реализовывать алгоритмы и создавать пользовательские интерфейсы.

Допустим, нам дан текстовый файл, содержащий следующие слова «Я УЧУСЬ У ГИККОВ ДЛЯ ГИККОВ». Теперь, если мы хотим прочитать слова файла в обратном порядке, результат должен быть «ГЕКСЫ ДЛЯ ГИККОВ ИЗ ИССЛЕДОВАНИЯ I».

Алгоритм:

  • Откройте данный файл с помощью функции fopen() (эта функция принимает имя файла в качестве аргумента и возвращает указатель на тип структуры FILE, который можно использовать для доступа к открытому файлу).
  • Перейти по возвращаемому указателю в конец заданного текстового файла с помощью функции fseek()
  • Теперь переместите этот указатель в положение end-1.
  • Прочитайте символ, на который указывает указатель, используя функцию fread(), и сохраните его в матрице.
  • Затем переместите указатель в текущую-2 позицию, снова прочитайте символ, на который указывает указатель, и сохраните его в матрице.
  • Теперь, если символ является пробелом, переверните массив. Используйте fliplr(), чтобы перевернуть массив/
  • Затем добавьте массив к строке и инициализируйте массив нулем.
  • Повторяйте этот алгоритм, пока указатель fp не достигнет начала файла.
  • Закройте файл с помощью функции fclose().

Пример 1:

Matlab




% MATLAB program for read words
% Opening the given file to read,
% name of the file is passed as
% an argument in fopen() function.
fp=fopen("rev.txt");
 
% Using fseek(),
% we will move fp to the end of file.
fseek(fp,0,"eof");
 
% Finding the position of fp using ftell()
fsz=ftell(fp);
i=1;
 
% Using fseek(), move fp to
% the current-1 position.
fseek(fp,-1,"cof");
 
% Using fread(),read a character
chr=fread(fp,1,"*char");
 
% Store the character in the matrix Z.
Z(1,i)=chr;
Word=0;
 
% Checking if fp has reached to
% start of the file.
    while(fseek(fp,-2,"cof")~=-1)
        
        c=fread(fp,1,"*char");
        % Character array is
        % reversed and appended into a string when a space occurs.
        if(isspace(chr))
              if(Word==0)
                  %Step 9- At first, the string is empty.
                  % Step 10- Now, the array is appended in
                  % the reverse order with a blank space.
                   Word=[fliplr(Z) blanks(1)];
              else
                  % Append the reversed character
                  % array to the string
                   Word=[Words fliplr(Z)];
              end
           i=1;
           Z="";
        else
            % The array is updated with the
            % characters until blank space is
            % encountered
           i=i+1;
           Z(1,i)=chr;
           
        end
 
 
    end
    
Word=[Word fliplr(Z)];
display(Word);
 
fclose(fp);

Выход: