У меня есть набор текстовых файлов с именем outfile00.txt до outfile297.txt . Каждый файл имеет номер (десятичный или другой) в каждой строке, кроме первой (которая похожа на заголовок).

Мне нужно импортировать содержимое каждого файла в столбец, начиная со столбца A (который будет соответствовать outfile00.txt), пока все текстовые файлы не будут импортированы.

Вот пример начала outfile00.txt:

KP=0.50 ,Ki=0.10 ,Kd=0.05
0.00
0.00
0.00
0.00

Фактический файл имеет около 1500 строк. Я попытался вручную импортировать текстовый файл с помощью вкладки «Данные»; Excel не имеет проблем, и текст импортируется.

Как я могу импортировать все текстовые файлы как пакет?

РЕДАКТИРОВАТЬ

Я считаю, что я не определил свою проблему четко, поэтому вот некоторые дополнительные детали.

Что касается метода кибернарда ,

Если я создаю файл значений, разделенных табуляцией (символ табуляции находится между буквой и цифрой в каждой строке) следующим образом,

a   1
b   2
c   3
e   4
f   5
g   6

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

Файл импортированных значений, разделенных табуляцией

Я надеялся создать файл, похожий на вышеупомянутый файл TSV. Пример будет следующим:

KP=0.50 ,Ki=0.10 ,Kd=0.05   KP=0.50 ,Ki=0.10 ,Kd=0.10   KP=0.50 ,Ki=0.10 ,Kd=0.15
0.00    117.00  123.00
0.00    118.00  124.00
0.00    119.00  125.00
0.00    120.00  126.00

который дает следующие результаты импорта,

Импортированные результаты из сгенерированного файла TSV

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

3 ответа3

1

Вы можете использовать Power Query для объединения всех файлов в папке. Power Query - это бесплатная надстройка от Microsoft для Excel 2010 и 2013, которая встроена в Excel 2016 как Get и Transform.

Кен Пулс имеет подробное руководство здесь.

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

0

Q: Мне нужно знать, как я могу сгенерировать такой файл TSV из моих исходных файлов.

Знаете ли вы, что есть команда только для этого?

paste outfile*.txt > out.txt

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

  1. awk: awk -f awk.awk outfile*.txt > out.txt

    BEGIN {count = 1}
    FNR == 1 && FNR < NR {count++}
    
    {
      if ( _[FNR] ) {
        while ( c[FNR] != count-1 ) {
          _[FNR] = (_[FNR] " " sprintf("%8s",""))
          c[FNR]++
        }
        _[FNR] = (_[FNR] "\t" sprintf("%-8s",$0))
        c[FNR]++
      }
      else if ( count == 1 ) {
        _[FNR] = sprintf("%-8s",$0)
        c[FNR]++
      }
      else {
        while ( c[FNR] != count-1 ) {
          if ( _[FNR] )
            _[FNR] = (_[FNR] " " sprintf("%8s",""))
          else
            _[FNR] = sprintf("%8s","")
          c[FNR]++
        }
        _[FNR] = (_[FNR] "\t" sprintf("%-8s",$0))
        c[FNR]++
      }
    }
    
    END {
      for (i=1; i<=length(_); i++)
        print _[i]
    }
    
  2. perl: perl perl.pl > out.txt

    use strict;
    use warnings;
    
    my $i;
    my @rows;
    my @files = map { "outfile$_.txt" } 0 .. 297;
    
    foreach my $file (@files) {
        open my $infh, '<', $file or die $!;
        $i=0;
        while (<$infh>) {
            chomp;
            my $data = $_;
            if (length $rows[$i]) {
                $rows[$i++] .= "\t" . $data;
            } else {
                $rows[$i++] = $data;
            }
        }
    }
    
    foreach my $row (@rows) {
        print "$row\n";
    }
    

PS Если вам интересно, bash, awk и perl доступны на нескольких платформах, включая Windows (Cygwin - моя рекомендация).

Обновление: вот входные файлы, которые я использовал, вместе с выводом команды paste outfile*.txt > out.txt в Git для Windows.

==> outfile00.txt <==
KP=0.50 ,Ki=0.10 ,Kd=0.05
0.00
0.00
0.00
0.00

==> outfile01.txt <==
KP=1.50 ,Ki=1.10 ,Kd=1.05
1.00
1.00
1.00
1.00

==> out.txt <==
KP=0.50 ,Ki=0.10 ,Kd=0.05       KP=1.50 ,Ki=1.10 ,Kd=1.05
0.00    1.00
0.00    1.00
0.00    1.00
0.00    1.00
0

Первые 00 должны быть переименованы в 0. Возможно, вам придется удалить другие 0 смещений. Например, 01,02,03 не будет работать, переименуйте в 1,2,3.

из командной строки перейдите в папку, содержащую все ваши файлы.

FOR /L% i IN (0,1297) DO наберите outfile% i.txt >> master.txt

Это должно объединить все ваши файлы в master.txt.

Итак, вы хотите клавишу табуляции между файлами. В блокноте создайте файл, содержащий одну вкладку с именем tab.txt, после сохранения убедитесь, что она имеет размер 1 байт, и вы случайно нажали другие символы.

FOR /L% i IN (0,1297) DO введите outfile% i.txt tab.txt >> master.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .