Как открыть текстовый файл в матлаб
Перейти к содержимому

Как открыть текстовый файл в матлаб

  • автор:

fscanf

A = fscanf( fileID , formatSpec ) считывает данные из открытого текстового файла в вектор-столбец A и интерпретирует значения в файле согласно формату, заданному formatSpec . fscanf функция повторно применяет формат в целом файле и располагает указатель файла в конце маркера. Если fscanf не может совпадать с formatSpec к данным это читает только фрагмент, который совпадает и прекращает обрабатывать.

Текстовый файл обозначается идентификатором файла, fileID Использование fopen чтобы открыть файл, задайте кодировку символов и получите fileID значение. Когда вы закончили читать, закрываете файл путем вызова fclose(fileID) .

A = fscanf( fileID , formatSpec , sizeA ) считывает данные о файле в массив, A , с размерностями, sizeA , и положения указатель файла после последнего чтения значения. fscanf заполняет A в порядке следования столбцов. sizeA должен быть положительное целое число или иметь форму [m n] , где m и n положительные целые числа.

[ A , count ] = fscanf( ___ ) дополнительно возвращает количество полей это fscanf чтения в A . Для числовых данных это — количество чтения значений. Можно использовать этот синтаксис с любым из входных параметров предыдущих синтаксисов.

Примеры

Чтение содержимого файла в вектор — столбец

Создайте демонстрационный текстовый файл, который содержит числа с плавающей запятой.

x = 100*rand(8,1); fileID = fopen('nums1.txt','w'); fprintf(fileID,'%4.4f\n',x); fclose(fileID);

Просмотрите содержимое файла.

type nums1.txt
81.4724 90.5792 12.6987 91.3376 63.2359 9.7540 27.8498 54.6882

Откройте файл для чтения и получите идентификатор файла, fileID .

fileID = fopen('nums1.txt','r');

Задайте формат данных, чтобы читать. Используйте ‘%f’ задавать числа с плавающей запятой.

formatSpec = '%f';

Считайте данные о файле, заполнив выходной массив, A , в порядке следования столбцов. fscanf повторно применяет формат, formatSpec , в файле.

A = fscanf(fileID,formatSpec)
A = 8×1 81.4724 90.5792 12.6987 91.3376 63.2359 9.7540 27.8498 54.6882

A вектор-столбец, содержащий данные из файла.

fclose(fileID);

Чтение содержимого файла в массив

Создайте демонстрационный текстовый файл, который содержит целые числа и числа с плавающей запятой.

x = 1:1:5; y = [x;rand(1,5)]; fileID = fopen('nums2.txt','w'); fprintf(fileID,'%d %4.4f\n',y); fclose(fileID);

Просмотрите содержимое файла.

type nums2.txt
1 0.8147 2 0.9058 3 0.1270 4 0.9134 5 0.6324

Откройте файл для чтения и получите идентификатор файла, fileID .

fileID = fopen('nums2.txt','r');

Задайте формат данных, чтобы читать и форма выходного массива.

formatSpec = '%d %f'; sizeA = [2 Inf];

Считайте данные о файле, заполнив выходной массив, A , в порядке следования столбцов. fscanf снова использует формат, formatSpec , в файле.

A = fscanf(fileID,formatSpec,sizeA)
A = 2×5 1.0000 2.0000 3.0000 4.0000 5.0000 0.8147 0.9058 0.1270 0.9134 0.6324
fclose(fileID);

Транспонируйте массив так, чтобы A совпадает с ориентацией данных в файле.

A = A'
A = 5×2 1.0000 0.8147 2.0000 0.9058 3.0000 0.1270 4.0000 0.9134 5.0000 0.6324

Пропуск определенных символов в файле

Пропустите определенные символы в файле примера и возвратите только числовые данные.

Создайте демонстрационный текстовый файл, содержащий температурные значения.

str = '78°C 72°C 64°C 66°C 49°C'; fileID = fopen('temperature.dat','w'); fprintf(fileID,'%s',str); fclose(fileID);

Считайте числа в файле, пропустив текст, °C. Также возвратите количество значений что fscanf чтения. Расширенный код ASCII 176 представляет знак степени.

fileID = fopen('temperature.dat','r'); degrees = char(176); [A,count] = fscanf(fileID, ['%d' degrees 'C']) fclose(fileID);
A = 78 72 64 66 49 count = 5

A вектор, содержащий числовые значения в файле. count указывает на тот fscanf считайте пять значений.

Входные параметры

fileID — Идентификатор файла
целое число

Идентификатор файла открытого текстового файла в виде целого числа. Прежде, чем считать файл с fscanf , необходимо использовать fopen открыть файл и получить fileID .

Типы данных: double

formatSpec — Формат полей данных
вектор символов | строковый скаляр

Формат полей данных в файле в виде вектора символов или строкового скаляра одного или нескольких спецификаторов преобразования. Когда fscanf читает файл, он пытается совпадать с данными к формату, заданному formatSpec .

Numeric Fields

Эта таблица приводит доступные спецификаторы преобразования для числовых входных параметров. fscanf преобразует значения в их десятичное число (базируйтесь 10), представление.

Целое число, со знаком

Значения в файле определяют основу:

  • Значение по умолчанию основное 10.
  • Если начальными цифрами является 0x или 0X , затем значения являются шестнадцатеричными (базируйтесь 16).
  • Если начальной цифрой является 0 , затем значения являются восьмеричными (базируйтесь 8).

64-битные значения, основа 10, 8, или 16

Целое число, без знака

Базируйтесь 8 (восьмеричный)

Базируйтесь 16 (шестнадцатеричный)

64-битные значения, основа 10, 8, или 16

Число с плавающей запятой

Поля с плавающей точкой могут содержать любое из следующих (не чувствительный к регистру): Inf Inf NaN , или -NaN .

Character Fields

Эта таблица приводит доступные спецификаторы преобразования для символьных входов.

Вектор символов или строковый скаляр

Считайте все символы, исключая пробелы.

Считайте любой отдельный символ, включая пробел.
Чтобы считать несколько символов за один раз, задайте ширину поля.

Сопоставление с образцом

Символы только для чтения в скобках до первого символа несоответствия или пробела.

Пример: %[mus] чтения ‘summer ‘ как ‘summ’ .

Если formatSpec содержит комбинацию числовых и символьных спецификаторов, затем fscanf преобразует каждый символ в его числовой эквивалент. Это преобразование происходит, даже когда формат явным образом пропускает все числовые значения (например, formatSpec ‘%*d %s’ ).

Optional Operators

  • Поля и символы, чтобы проигнорировать fscanf чтения все числовые значения и символы в вашем файле в последовательности, если вы не говорите ему игнорировать конкретное поле или фрагмент поля. К полям игнорируемых данных вставьте звездочку ( * ) после знака процента ( % ). Например, чтобы пропустить целые числа, задайте %*d .
  • Ширина поля Чтобы задать максимальное количество цифр или текстовых символов, чтобы читать за один раз, вставьте номер после символа процента. Например, %10c чтения до 10 символов за один раз, включая пробел. %4f чтения до 4 цифр за один раз, включая десятичную точку.
  • Буквенный текст, чтобы проигнорировать fscanf игнорирует заданный текст, добавленный к formatSpec спецификатор преобразования. Пример: Level%u чтения ‘Level1’ как 1 . Пример: %uStep чтения ‘2Step’ как 2 .

sizeA — Размерности выходного массива
Inf (значение по умолчанию) | целое число | двухэлементный вектор-строка

Размерности выходного массива, A В виде Inf , целое число или двухэлементный вектор-строка.

Форма sizeA Входной параметр Описание
Inf Читайте в конец файла.
Для числовых данных, выхода, A , вектор-столбец.
Для текстовых данных, A вектор символов.
n Читайте в большей части n числовые значения или символьные поля.
Для числовых данных, выхода, A , вектор-столбец.
Для текстовых данных, A , вектор символов.
m, n ] Читайте в большей части m N числовые значения или символьные поля. n может быть Inf , но m не может. Выход, A , m — n , заполненный порядок следования столбцов.

Выходные аргументы

A — Данные о файле
вектор-столбец | матрица | вектор символов | символьный массив

Данные о файле, возвращенные как вектор-столбец, матрица, вектор символов или символьный массив. Класс и размер A зависьте от formatSpec входной параметр:

  • Если formatSpec содержит только числовые спецификаторы, затем A isnumeric. Если вы задаете sizeA аргумент, затем A матрица заданного размера. В противном случае, A вектор-столбец. Если вход содержит меньше, чем sizeA значения, затем fscanf клавиатуры A с нулями.
  • Если formatSpec содержит только 64-битные спецификаторы целого числа со знаком, затем A имеет класс int64 .
  • Если formatSpec содержит только 64-битные спецификаторы беззнаковых целых чисел, затем A имеет класс uint64 .
  • В противном случае, A имеет класс double .

count — Количество чтения символов
скаляр

Количество чтения символов, возвращенного как скалярное значение.

Советы

  • Спецификаторы формата для чтения функционируют sscanf и fscanf отличайтесь от форматов для функций записи sprintf и fprintf . Функции чтения не поддерживают поле точности. Поле width задает минимум для записи, но максимум для чтения.

Алгоритмы

MATLAB читает символы с помощью схемы кодирования, сопоставленной с файлом. Вы задаете кодирование, когда вы открываете файл с помощью fopen функция.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Указания и ограничения по применению:

  • Для генерации кода MEX, обработок генератора кода fscanf как внешняя функция. Смотрите Использование MATLAB Engine, чтобы Выполнить Вызов функции в Сгенерированном коде (MATLAB Coder) .
  • Входной параметр formatSpec должна быть константа.
  • %s и %[. ] спецификаторы преобразования не поддерживаются.
  • Если вы генерируете MEX, динамическое выделение памяти должно быть включено.
  • При генерации автономного кода, если вы выключаете динамическое выделение памяти, необходимо предоставить входному параметру sizeA и это должна быть константа.
  • В определенных случаях поведение сгенерированного кода может отличаться от MATLAB. В таких случаях, поведении соответствий сгенерированного кода тот из fscanf на языке C. Это некоторые примеры:
  • В сгенерированном коде, если fscanf читает пустой байт, возвращенные значения могут быть усеченными.
  • Если вы читаете целочисленное значение x в целочисленный формат, для который intmax меньше, чем x , MATLAB выход насыщает в intmax . В сгенерированном коде эта ситуация вызывает переполнение.
  • В определенных случаях, после fscanf чтения из файла, местоположение указателя файла может отличаться в MATLAB и сгенерированном коде. Например, предположите что файл myFile.txt содержит вектор символов ‘1+2I’ . Вы выполняете эти команды:
fid = fopen('myFile.txt','r'); tmp = fscanf(fid, '%f')
tmp = 1 2

Использование ftell определить текущее местоположение указателя положения в файле myFile.txt .

ftell(fid)
ans = 3

Смотрите также

Темы

Представлено до R2006a

Открытый пример

У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?

Документация MATLAB

Поддержка

  • MATLAB Answers
  • Помощь в установке
  • Отчеты об ошибках
  • Требования к продукту
  • Загрузка программного обеспечения

© 1994-2021 The MathWorks, Inc.

  • Условия использования
  • Патенты
  • Торговые марки
  • Список благодарностей

Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика

1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.

2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.

3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.

4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.

5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.

MATLAB — импорт данных

Загружает данные в массив A из файла, обозначенного именем файла .

A = importdata (‘- pastespecial’)

Загружает данные из системного буфера обмена, а не из файла.

A = importdata (___, delimiterIn)

Интерпретирует delimiterIn как разделитель столбцов в файле ASCII, имени файла или данных буфера обмена. Вы можете использовать delimiterIn с любым из входных аргументов в приведенных выше синтаксисах.

A = importdata (___, delimiterIn, headerlinesIn)

Загружает данные из файла ASCII, имени файла или буфера обмена, считывая числовые данные, начиная со строки headerlinesIn + 1 .

[A, delimiterOut, headerlinesOut] = importdata (___)

Возвращает обнаруженный символ разделителя для входного файла ASCII в delimiterOut и обнаруженное количество строк заголовка в headerlinesOut , используя любой из входных аргументов в предыдущих синтаксисах.

A = importdata (имя файла)

Загружает данные в массив A из файла, обозначенного именем файла .

A = importdata (‘- pastespecial’)

Загружает данные из системного буфера обмена, а не из файла.

A = importdata (___, delimiterIn)

Интерпретирует delimiterIn как разделитель столбцов в файле ASCII, имени файла или данных буфера обмена. Вы можете использовать delimiterIn с любым из входных аргументов в приведенных выше синтаксисах.

A = importdata (___, delimiterIn, headerlinesIn)

Загружает данные из файла ASCII, имени файла или буфера обмена, считывая числовые данные, начиная со строки headerlinesIn + 1 .

[A, delimiterOut, headerlinesOut] = importdata (___)

Возвращает обнаруженный символ разделителя для входного файла ASCII в delimiterOut и обнаруженное количество строк заголовка в headerlinesOut , используя любой из входных аргументов в предыдущих синтаксисах.

По умолчанию Octave не поддерживает функцию importdata () , поэтому вам придется искать и устанавливать этот пакет, чтобы следующие примеры работали с вашей установкой Octave.

Пример 1

Давайте загрузим и отобразим файл изображения. Создайте файл сценария и введите в нем следующий код —

filename = 'smile.jpg'; A = importdata(filename); image(A);

Когда вы запускаете файл, MATLAB отображает файл изображения. Однако вы должны сохранить его в текущем каталоге.

Импорт файлов Imange

Пример 2

В этом примере мы импортируем текстовый файл и указываем разделитель и заголовок столбца. Давайте создадим ASCII-файл, разделенный пробелами, с заголовками столбцов с именем weeklydata.txt .

Наш текстовый файл weeklydata.txt выглядит так —

SunDay MonDay TuesDay WednesDay ThursDay FriDay SaturDay 95.01 76.21 61.54 40.57 55.79 70.28 81.53 73.11 45.65 79.19 93.55 75.29 69.87 74.68 60.68 41.85 92.18 91.69 81.32 90.38 74.51 48.60 82.14 73.82 41.03 0.99 67.22 93.18 89.13 44.47 57.63 89.36 13.89 19.88 46.60

Создайте файл сценария и введите в нем следующий код —

filename = 'weeklydata.txt'; delimiterIn = ' '; headerlinesIn = 1; A = importdata(filename,delimiterIn,headerlinesIn); % View data for k = [1:7] disp(A.colheaders1, k>) disp(A.data(:, k)) disp(' ') end

Когда вы запускаете файл, он показывает следующий результат —

SunDay 95.0100 73.1100 60.6800 48.6000 89.1300 MonDay 76.2100 45.6500 41.8500 82.1400 44.4700 TuesDay 61.5400 79.1900 92.1800 73.8200 57.6300 WednesDay 40.5700 93.5500 91.6900 41.0300 89.3600 ThursDay 55.7900 75.2900 81.3200 0.9900 13.8900 FriDay 70.2800 69.8700 90.3800 67.2200 19.8800 SaturDay 81.5300 74.6800 74.5100 93.1800 46.6000

Пример 3

В этом примере давайте импортируем данные из буфера обмена.

Скопируйте следующие строки в буфер обмена —

Математика проста

Создайте файл сценария и введите следующий код —

A = importdata('-pastespecial')

Когда вы запускаете файл, он показывает следующий результат —

A = 'Mathematics is simple'

Низкоуровневый файловый ввод / вывод

Функция importdata является высокоуровневой функцией. Низкоуровневые функции ввода / вывода файлов в MATLAB позволяют максимально контролировать чтение или запись данных в файл. Однако эти функции нуждаются в более подробной информации о вашем файле для эффективной работы.

MATLAB предоставляет следующие функции для операций чтения и записи на уровне байтов или символов:

функция Описание
fclose Закройте один или все открытые файлы
feof Тест на конец файла
FERROR Информация об ошибках файлового ввода-вывода
fgetl Чтение строки из файла, удаление символов новой строки
fgets Читать строку из файла, сохраняя символы новой строки
Еореп Откройте файл или получите информацию об открытых файлах
fprintf Записать данные в текстовый файл
Fread Чтение данных из двоичного файла
frewind Переместить индикатор положения файла в начало открытого файла
fscanf Читать данные из текстового файла
FSEEK Переместить в указанную позицию в файле
ftell Положение в открытом файле
FWRITE Записать данные в двоичный файл

Импорт текстовых файлов данных с низкоуровневым вводом / выводом

MATLAB предоставляет следующие функции для низкоуровневого импорта файлов текстовых данных —

  • Функция fscanf читает отформатированные данные в текстовом или ASCII-файле.
  • Функции fgetl и fgets читают по одной строке файла за раз, где символ новой строки разделяет каждую строку.
  • Функция fread считывает поток данных на уровне байтов или битов.

Функция fscanf читает отформатированные данные в текстовом или ASCII-файле.

Функции fgetl и fgets читают по одной строке файла за раз, где символ новой строки разделяет каждую строку.

Функция fread считывает поток данных на уровне байтов или битов.

пример

У нас есть текстовый файл данных «myfile.txt», сохраненный в нашем рабочем каталоге. Файл хранит данные об осадках за три месяца; Июнь, июль и август за 2012 год.

Данные в myfile.txt содержат повторные наборы измерений времени, месяца и количества осадков в пяти местах. Данные заголовка хранят количество месяцев M; таким образом, у нас есть M наборов измерений.

Файл выглядит так —

Rainfall Data Months: June, July, August M = 3 12:00:00 June-2012 17.21 28.52 39.78 16.55 23.67 19.15 0.35 17.57 NaN 12.01 17.92 28.49 17.40 17.06 11.09 9.59 9.33 NaN 0.31 0.23 10.46 13.17 NaN 14.89 19.33 20.97 19.50 17.65 14.45 14.00 18.23 10.34 17.95 16.46 19.34 09:10:02 July-2012 12.76 16.94 14.38 11.86 16.89 20.46 23.17 NaN 24.89 19.33 30.97 49.50 47.65 24.45 34.00 18.23 30.34 27.95 16.46 19.34 30.46 33.17 NaN 34.89 29.33 30.97 49.50 47.65 24.45 34.00 28.67 30.34 27.95 36.46 29.34 15:03:40 August-2012 17.09 16.55 19.59 17.25 19.22 17.54 11.45 13.48 22.55 24.01 NaN 21.19 25.85 25.05 27.21 26.79 24.98 12.23 16.99 18.67 17.54 11.45 13.48 22.55 24.01 NaN 21.19 25.85 25.05 27.21 26.79 24.98 12.23 16.99 18.67

Мы импортируем данные из этого файла и отображаем эти данные. Сделайте следующие шаги —

  • Откройте файл с помощью функции fopen и получите идентификатор файла.
  • Опишите данные в файле с помощью спецификаторов формата , таких как « % s » для строки, « % d » для целого числа или « % f » для числа с плавающей запятой.
  • Чтобы пропустить буквенные символы в файле, включите их в описание формата. Чтобы пропустить поле данных, используйте звездочку (‘*’) в спецификаторе. Например, чтобы прочитать заголовки и вернуть единственное значение для M, мы пишем —

M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);

Откройте файл с помощью функции fopen и получите идентификатор файла.

Опишите данные в файле с помощью спецификаторов формата , таких как « % s » для строки, « % d » для целого числа или « % f » для числа с плавающей запятой.

Чтобы пропустить буквенные символы в файле, включите их в описание формата. Чтобы пропустить поле данных, используйте звездочку (‘*’) в спецификаторе.

Например, чтобы прочитать заголовки и вернуть единственное значение для M, мы пишем —

По умолчанию fscanf считывает данные в соответствии с нашим описанием формата, пока не найдет совпадения для данных или не достигнет конца файла. Здесь мы будем использовать цикл для чтения 3 наборов данных и каждый раз будем читать 7 строк и 5 столбцов.

Мы создадим структуру с именем mydata в рабочей области для хранения данных, считанных из файла. Эта структура имеет три поля — время , месяц и массив raindata .

Создайте файл сценария и введите в нем следующий код —

filename = '/data/myfile.txt'; rows = 7; cols = 5; % open the file fid = fopen(filename); % read the file headers, find M (number of months) M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1); % read each set of measurements for n = 1:M mydata(n).time = fscanf(fid, '%s', 1); mydata(n).month = fscanf(fid, '%s', 1); % fscanf fills the array in column order, % so transpose the results mydata(n).raindata = . fscanf(fid, '%f', [rows, cols]); end for n = 1:M disp(mydata(n).time), disp(mydata(n).month) disp(mydata(n).raindata) end % close the file fclose(fid);

Когда вы запускаете файл, он показывает следующий результат —

Чтение текстового файла и запись

Author24 — интернет-сервис помощи студентам

Здравствуйте! помогите разобраться, у меня огромный текстовый файл, в начале содержит текстовые данные, а потом в основном числовые. Мне нужно в тексте находить необходимые мне фразы и записывать их в другой файл, в основном пишет, что я указываю неправильный тип переменных, хотя всё ввожу правильно. Если поможет, то я хочу выводить нужные мне фразы из файла формата Rinex.

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Чтение текстового файла
Добрый день! Есть текстовый файл, который надо прочесть. Фрагмент прикрепляю. Проблема в том, что.

Чтение текстового файла
Люди добрые, помогите с одной проблемой разобраться! Есть текстовый файл в с набором данных (см.

Чтение текстового файла
Такой вопрос, не пойму как прочесть текстовый файл, допустим есть текстовый файл находящийся на.

Чтение информации из текстового файла
Здравствуйте! Помогите, пожалуйста, решить задачу. В текстовый файл записаны полные названия.

6833 / 4893 / 2066
Регистрация: 02.02.2014
Сообщений: 13,057

ЦитатаСообщение от nibron11 Посмотреть сообщение

из файла формата Rinex
приложите его.
Регистрация: 24.10.2019
Сообщений: 14
только сокращённый

RINEX.txt (14.2 Кб, 9 просмотров)

6833 / 4893 / 2066
Регистрация: 02.02.2014
Сообщений: 13,057
структура файла неоднородная..
что конкретно надо?

ЦитатаСообщение от nibron11 Посмотреть сообщение

в тексте находить необходимые мне фразы

один из вариантов чтения файла..

1 2 3 4
clc; clear ff=importdata('RINEX.txt') ff.data ff.textdata

затем можно обрабатывать на свое усмотрение
Регистрация: 24.10.2019
Сообщений: 14

ну, например мне нужно определить тип данных в файле, в данном файле это M (MIXED), как мне написать, чтобы программа находила этот вариант, ну, или другой и записывала его в другой файл

6833 / 4893 / 2066
Регистрация: 02.02.2014
Сообщений: 13,057

Лучший ответ

Сообщение было отмечено nibron11 как решение

Решение

1 2 3 4 5 6 7 8 9 10
clc; clear ff=importdata('RINEX.txt') % ff.data ff.textdata{1} expr= 'DATA\s+(.*?)\s+RINEX'; s=regexp(ff.textdata{1},expr,'tokens') s{1}{1} fid=fopen('other.txt','wt') fwrite(fid,['type:' s{1}{1}]); fclose(fid);

Добавлено через 17 минут
вариант ниже подходит, если не нужны числовые данные

1 2 3 4 5 6 7 8 9 10
clc; clear ff=fileread('RINEX.txt'); expr= 'OBSERVATION DATA\s+(.*?)\s+RINEX'; s=regexp(ff,expr,'tokens') s{1}{1} fid=fopen('other.txt','wt'); fwrite(fid,['type:' s{1}{1}]); fclose(fid);

Регистрация: 24.10.2019
Сообщений: 14

Спасибо большое, помогло!) а можно как то универсально написать, чтобы я не только M (MIXED) мог найти, а в другой строке что то другое и так же записать?

6833 / 4893 / 2066
Регистрация: 02.02.2014
Сообщений: 13,057
я вам образец дала.. дальше по мере потребности дополняйте код..
Регистрация: 24.10.2019
Сообщений: 14

хорошо, последний вопрос, а если мы не знаем что находится до нужной нам фразы и после нее мы сможем таким же способом найти то, что нам нужно?

6833 / 4893 / 2066
Регистрация: 02.02.2014
Сообщений: 13,057

рабочий файл открывается в текстовом редакторе, анализируйте.
если вы кучу таких файлов обрабатываете, то стоит потратить время на анализ и построение алгоритма извлечения инфы..

Регистрация: 24.10.2019
Сообщений: 14
Кто подскажет, в чём ошибка?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
>> rinex=fopen('RINEX1.txt','rt'); >> if rinex==-1 error('File is not to opened'); end >> generalHeader={'week','epoch','flag','prn'}; >> measurementsInterval=-1; >> while(true) line=fgetl(rinex); splitLine=strsplit(line); if strfind(line,'APPROX POSITION XYZ') XYZ_station=tokens(str2double(line(1:60))); XYZ_station{1}{1} fid=fopen('my_save.txt','a'); fwrite(fid,['XYZ:' XYZ_station{1}{1}]); fclose(fid); elseif ~isempty(strfind(line,'SYS / # / OBS TYPES')) constellation = line(1); if constellation == 'G' hasGps = 1; elseif constellation == 'R' hasGlonass = 1; elseif constellation == 'C' hasBeidou = 1; end nObservables = str2double(line(2:7)); observables = splitLine(3:end - 7); observables = [generalHeader, observables]; if nObservables >13 line2 = fgetl(rinex); splitLine2 = strsplit(line2); observables = [observables, splitLine2(2:end - 7) ]; end observablesHeader{uint8(constellation)} = observables; elseif strfind(line,'INTERVAL') measurementsInterval=str2double(line(5:10)); elseif strfind(line,'END OF HEADER'); break; end end
RINEX1.txt (1.6 Кб, 5 просмотров)

How to read a txt file in matlab?

I’m completely new to Matlab, so my question may sound dumb! I apologize. I’m trying to open a txt file in Matlab and produce a colormap with the data in the file. But it seems like Matlab doesn’t read the file correctly. I attached the file for your reference. I used ‘importdata’ function. It should look like

but every time I import the data, it shows something like this:

Can anyone please help me? Thank you so much in advance

3 Comments

Image Analyst on 30 Aug 2018

Direct link to this comment

Cancel Copy to Clipboard

Direct link to this comment

Cancel Copy to Clipboard
Edited: Image Analyst on 30 Aug 2018

Your attached data look nothing like either one of those. Just open it in Notepad to see. It looks like this:

EcoBase on 30 Aug 2018

Direct link to this comment

Cancel Copy to Clipboard

Direct link to this comment

Cancel Copy to Clipboard
Edited: Stephen23 on 30 Aug 2018

Oops!! I’m so sorry, I attached a wrong one. Please check the new file attached. (The file is too large, so I pasted only a few rows from the original one). What I’m trying to do is the same as this approach — https://kr.mathworks.com/matlabcentral/answers/337686-how-to-create-an-image-from-txt-file

The file contains x, y coordinates of an image and relevant value for each pixel. Thank you.
EcoBase on 31 Aug 2018

Direct link to this comment

Cancel Copy to Clipboard

Direct link to this comment

Cancel Copy to Clipboard

I uploaded two original files and shared in links below: https://drive.google.com/open?id=1utfXBqnRgjv6AIl_dSor-amooxk3-QwQ

https://drive.google.com/open?id=12NGdhO6xZ1525IkjLUhIHEKjSxbgGy1o
I’d really appreciate it if you could check and help me with the problem! Thank you.

Accepted Answer

KSSV on 30 Aug 2018

Direct link to this answer

Cancel Copy to Clipboard

Direct link to this answer

Cancel Copy to Clipboard
data = importdata( ‘data.txt’ ) ;
x = data(:,1) ; y = data(:,2) ; z = data(:,3) ;
plot3(x,y,z) ; % with the present data
% If you want a surf plot and data is full
xi = linspace(min(x),max(x),N) ;
yi = linspace(min(y),max(y),N) ;
[X,Y] = meshgrid(xi,yi) ;
F = scatteredInterpolant(x,y,z, ‘linear’ , ‘none’ ) ;
Z = reshape(F(X(:),Y(:)),N,N) ;

4 Comments

EcoBase on 30 Aug 2018

Direct link to this comment

Cancel Copy to Clipboard

Direct link to this comment

Cancel Copy to Clipboard

Thank you for your answer! I really appreciate your time commitment for this dumb question 🙂 I tried, but I see the same problem again. When I imported the data, the data matrix is shown like, for example, (0.7560, 0.2600, 0.0011), but it should be something like this, (756, 260, 0.00115986). I don’t know if I just have to ignore this! Also, I got an error with ‘scatteredInterpolant’.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *