4

У меня есть целая куча файлов данных с разным содержимым, но идентичной версткой. Мне нужно преобразовать их в CSV, прежде чем импортировать их в приложение CRM.

Я обычно открываю файл с разделителями табуляции в Excel, который предлагает мне вручную определить позиции табуляции с помощью мастера импорта текста. После открытия файла я конвертирую его в CSV.

Проблема в том, что у меня есть куча этих файлов (скажем, 20-30), и Excel не помнит, что делает в мастере импорта текста, и по причинам, слишком длинным для объяснения, я не могу просто объединить их все в один массовый файл - даже если структура данных идентична.

Мне интересно, есть ли какая-нибудь программа или процесс, который позволил бы мне сохранить "шаблон" структуры файла данных, а затем применить его к каждому файлу, чтобы мне не пришлось создавать его заново вручную?

6 ответов6

3

Для этого я обычно использую пакетный процесс на языке сценариев.

Например, это AutoIt:

$getfile = FileOpenDialog("Choose a file",@ScriptDir, "*.tsv",7)
If StringInSTr($getfile,"|") = 0 Then
    $split = StringSplit($getfile,"|")
    For $i = 2 to $split[0]
        $file = FileOpen($split[$i])
        StringReplace($split[$i],@TAB,",")
        FileClose($split[$i])
    Next
Else
    $file = FileOpen($getfile)
    StringReplace($file,@TAB,",")
    FileClose($file)
EndIf

Это было бы так же просто в VBScript, Batch, Python или Perl.

0

Какие инструменты у вас есть в вашем распоряжении? Например, вы ограничены графическим интерфейсом Windows или, скажем, у вас есть учетная запись оболочки Linux? Вы можете загрузить произвольный мусор, или вы ограничены тем, что находится на вашей рабочей станции из коробки?

Если ничего другого, как насчет открытия файлов в Word / wordpad / notepad и выполнения глобального поиска и замены, заменяя вкладки запятыми? Или, может быть, с "," , если ваш набор данных содержит запятые.

0

Я склонен использовать Textpad для такого рода вещей, так как я могу выполнять поиск и замену с помощью регулярных выражений, поэтому я заменяю вкладки запятыми. Может быть, подобный подход может помочь в вашем сценарии

0

Если столбцы данных разделены одной или несколькими вкладками каждая

perl -p -i.bak -e "s/\t+/,/g" filenames

где filenames могут быть *.tsv например - или список имен файлов.

Если столбцы данных разделены пробелами и ни один из фактических данных не содержит пробелов

perl -p -i.bak -e "s/\s+/,/g" filenames

Если данные могут содержать пробелы, я бы написал немного более сложный сценарий, используя subscript или unpack на основе списка позиций столбцов или ширины. Опубликовать краткий пример фактических строк данных и желаемого результата.

0

Если вы работаете в Windows и у вас установлен PowerShell, вы можете использовать эту однострочную версию, чтобы взять все.CSV-файлы в текущей папке, импортируйте их как файл с разделителями табуляции (`t) и экспортируйте их обратно как настоящие CSV-файлы с тем же именем, но с префиксом« New- »:

(get-childitem "*.csv" | foreach ($_) { ($newName="New-"+$_.name) -and (Import-Csv $_.fullname -Delimiter "`t" | Export-Csv .\$newName -notype) }) -and (Remove-Variable "newName")

Для пояснения / написания сценариев, здесь он разбит на несколько строк:

get-childitem "*.csv" | foreach ($_) { 
    $newName="New-"+$_.name
    Import-Csv $_.fullname -Delimiter "`t" | Export-Csv .\$newName -notype
    }
Remove-Variable "newName"
-1

Используя макрос, вы сможете сохранить тип разделителя с фиксированной шириной в CSV.

Оттуда относительно легко разобрать весь каталог файлов, открыв их как фиксированную ширину и сохранив их как csv.

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

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