Преобразование txt-файла в csv [только определенное содержимое, соответствующее шаблону строки]

У меня есть файл *.DAT, который можно открыть в текстовом редакторе. Я хочу извлечь из этого некоторое содержимое и преобразовать его в *.csv. Преобразованный CSV-файл должен иметь заголовок (имена столбцов), спецификацию (ниже и выше) и часть данных. Мне нужно преобразовать 100 файлов такого типа в *.csv (как отдельные файлы csv или все вместе в один большой файл csv)

Пример фрагмента моего файла *.DAT будет выглядеть следующим образом

[FILEINFO]
VERSION=V4.0
FILENAME=TEST.DAT
CREATIONTIME=2015-07-09 22:05:26

[LOTINFO]
LotNo=A6022142  
DUT=BCEK450049
PRODUCTNAME=EX061
Order=
ChipCode=
SACH_NO=B39000-
MAT_NO=B39000-P810

[SPEC1]
TXT=SEN1
Unit=
LSL=-411.400000
USL=-318.700000

[SPEC2]
TXT=SEN2
Unit=
LSL=-11.000000
USL=11.000000

[SPEC3]
TXT=SEN3
Unit=
LSL=-45.000000
USL=10.000000

[DATA]
 2,29,-411.232,10.193,-11.530,
 3,29,-411.257,10.205,-11.328,

Я могу извлечь содержимое ниже [DATA] и сохранить в файле csv. Я не уверен, как извлечь содержимое выше, чтобы создать заголовок и т. д. Я использовал приведенный ниже код для извлечения содержимого ниже [DATA].

       library(stringr)
       library(readr)

       myTXT <- read_file("EXAMPLE.DAT")

       ExtData <- read.csv(text = 
           sub(".*\\[DATA\\]\\s+", "", my_txt), header = FALSE)

       dat2csv <- write.csv(ExtData, dat_2_csv.csv",row.names=FALSE)

Чтобы извлечь содержимое выше [DATA], я безуспешно пробовал код ниже.

        con <- file("EXAMPLE.DAT","r")
        OneLine <- c()

        while(True) {
          line = readLines(con,1)
          if(length(line) == 0) break
          elseif(line="LSL=")
          RES <- str_split(line,"=",simplify=TRUE)
          lines <- RES[1,2]
        }

Ожидаемый выходной CSV-файл, как показано ниже.

введите здесь описание изображения


person BharatAyya    schedule 11.07.2019    source источник


Ответы (1)


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

Я могу только дать вам свои 5 центов моей общей стратегии для решения этой проблемы:

  • Во-первых, вместо того, чтобы сосредоточиться на формате .csv, вы должны сначала сосредоточиться на преобразовании этого текстового файла в формат таблицы.
  • Для этого вы должны сохранить параметры в отдельных векторах/столбцах (Каждый столбец может быть TXT, Unit, LSL и т. д.)
  • При этом каждая строка (SPEC1, SPEC2, SPEC3) будет представлять каждую точку данных со всеми ее характеристиками.
  • Тем не менее, похоже, что он также содержит метаданные, и поэтому вы можете сохранить разные фрагменты данных в разные переменные (file.info = read_file(x, nrows = 4))

Надеюсь, это может немного помочь.

Изменить: как сказал @qwe, формат напоминает файл .ini. Поэтому хорошим способом начать было бы открыть файл с разделителем '=':

data = read.table('example.dat', delim = '=')
person Hart Radev    schedule 11.07.2019
comment
выглядит как файл .ini для меня. - person qwr; 11.07.2019