2015-04-08 3 views
0

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

Я не программист или технический человек У меня есть проект, где мне нужно, чтобы преобразовать большой текстовый файл в базу данных доступа. Текстовый файл не находится в традиционном формате плоского файла, поэтому мне нужна предварительная обработка справки. Файлы большие (миллионы записей) между 100 МБ и 1 ГБ и, кажется, задыхаются от всех редакторов, которые я пробовал (блокнот, блокнот, vim, редактор em)

Ниже приведен пример исходного текста файл:

product/productId:B000H9LE4U 

product/title: Copper 122-H04 Hard Drawn Round Tubing, ASTM B75, 1/2" OD, 0.436" ID, 0.032" Wall, 96" Length 

product/price: 22.14 

review/userId: ABWHUEYK6JTPP 

review/profileName: Robert Campbell 

review/helpfulness: 0/0 

review/score: 1.0 

review/time: 1339113600review/summary: Either 1 or 5 Stars. Depends on how you look at it. 

review/text: Either 1 or 5 Stars. Depends on how you look at it.1 Star because they sent 6 feet of 2" OD copper pipe.0 Star because they won't accept returns on it.5 stars because I figure it's actually worth $12-15/foot and since they won't take a return I figure I can sell it and make $40-50 on this deal 

product/productId: B000LDNH8I 

product/title: Bacharach 0012-7012 Sling Psychrometer, 25?F to 120?F, red spirit filled 

product/price: 84.99 

review/userId: A19Y7ZIICAKM48 

review/profileName: T Foley "computer guy" 

review/helpfulness: 3/3 

review/score: 5.0 

review/time: 1248307200 

review/summary: I recommend this Sling Psychrometer 

review/text: Not too much to say. This instrument is well built, accurate (compared) to a known good source. It's easy to use, has great instructions if you haven't used one before and stores compactly.I compared prices before I purchased and this is a good value. 

Каждая строка представляет определенный атрибут продукта, начиная с "продукта/ProductID:"

Что мне нужно

Мне нужно преобразовать это файл в поле с разделителями символов (я думаю, что работа с символом @), удаляя каждый из кодов (т. product/productId :, product/title :, и т. д., а также заменить на @ и заменить линии.

Я хочу, чтобы исключить обзор/текст: линия

Вывод будет выглядеть следующим образом:

[email protected] 122-H04 Hard Drawn Round Tubing, ASTM B75, 1/2" OD, 0.436" ID, 0.032" Wall, 96" [email protected]@[email protected] [email protected]/[email protected]@[email protected] 1 or 5 Stars. Depends on how you look at it. 

[email protected] 0012-7012 Sling Psychrometer, 25?F to 120?F, red spirit [email protected]@[email protected] Foley "computer guy"@3/[email protected]@[email protected] recommend this Sling Psychrometer 

[email protected] 0012-7012 Sling Psychrometer, 25?F to 120?F, red spirit [email protected]@[email protected] L. [email protected]/[email protected]@[email protected] very useful tool 

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

Извините за бесплодие. Я открыт для предложений, но не понимаю программирования, достаточного для написания с использованием языка редактора. Заранее спасибо

ответ

0

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

Это первое, что вам нужно решить.

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

+0

Спасибо. Это та часть, с которой у меня проблемы. В редакторе я использую дроссели в файле, когда вручную пытаюсь выполнить поиск и замену текстовых строк и удалить строки. Я думал, что может быть какой-то способ написать простую программу (например, python или воспользоваться см., Но я не знаю, как это сделать). Смотрел какие-то рекомендации. – SDG

0

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

Public Sub ReadFileAndSave(filePath As String, breakIdentity As String, Optional sepStr As String = "@") 
'****************************************************************************** 
' Opens a large TXT File, reads the data until EOF on the Source, 
'  then reformats the data to be saved on the Destination 
' Arguments: 
' `````````` 
'  1. The Source File Path - "C:\Users\SO\FileName.Txt" (or) D:\Data.txt 
'  2. The element used to identify new row - "new row" (or) "-" (or) "sam" 
'  3. (Optional) Separator - The separator, you wish to use. Defauls to '@' 
'******************************************************************************* 
    Dim newFilePath As String, strIn As String, tmpStr As String, lineCtr As Long 

    'The Destination file is stored in the same drive with a suffix to the source file name 
    newFilePath = Replace(filePath, ".txt", "-ReFormatted.txt") 

    'Open the SOURCE file for Read. 
    Open filePath For Input As #1 

    'Open/Create the DESTINATION file for Write. 
    Open newFilePath For Output As #2 

    'Loop the SOURCE till the last line. 
    Do While Not EOF(1) 
     'Read one line at a time. 
     Line Input #1, strIn 
     'If it is a blank/empty line SKIP. 
     If Len(strIn) > 1 Then 
      lineCtr = lineCtr + 1 
      'Create a String of the same ID. 
      tmpStr = tmpStr & Trim(Mid(strIn, InStr(strIn, ":") + 1)) & sepStr 
      'If a new row needs to be inserted, the BREAK IDENTITY is analyzed. 
      If InStr(strIn, breakIdentity) <> 0 And lineCtr > 1 Then 
       'Once the new row is triggered, dump the line in the Destination. 
       Print #2, Left(tmpStr, Len(tmpStr) - Len(Mid(strIn, InStr(strIn, ":") + 1)) - 1) & vbCrLf 
       'Prepare the NEXT ROW 
       tmpStr = Trim(Mid(strIn, InStr(strIn, ":") + 1)) & sepStr 
      End If 
     End If 
    Loop 

    'Print the last line 
    Print #2, Left(tmpStr, Len(tmpStr) - 1) & vbCrLf 

    'Close the files. 
    Close #1 
    Close #2 
End Sub 

Опять же, этот код работает в моей системе, и я не тестировал основную массу вещества, поэтому он может быть медленнее в вашей. Сообщите мне, если это будет хорошо для вас.

Смежные вопросы