Конвертировать текстовый файл в csv [только определенное содержимое, соответствующее строковому шаблону] - PullRequest
1 голос
/ 11 июля 2019

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

Я могу извлечь содержимое ниже [ДАННЫЕ] и сохранить в CSV-файл. Я не уверен, как извлечь содержимое выше, чтобы создать заголовок и т. Д. Я использовал код ниже, чтобы извлечь содержимое ниже [ДАННЫЕ]

       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)

Чтобы извлечь содержимое выше [ДАННЫЕ], я попробовал приведенный ниже код безуспешно

        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-файл, как показано ниже

enter image description here

1 Ответ

1 голос
/ 11 июля 2019

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

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

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

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

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

data = read.table('example.dat', delim = '=')
...