AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.04.2010, 13:23   #1  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Вопрос экспорта/импорта объектов как текст.


Помещаем все текстовики в папку, перетаскиваем папку на скрипт

Код:
'==========================================  Начало файла 
'Имя: glue.vbs
'Язык: VBScript 
'Описание: Собирает все текстовые файлы в один
'Использование: Перетащить папку на скрипт 
'========================================================== 
 set WshShell=WScript.CreateObject("WScript.Shell")
 Dim lngI, objArgs 
 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
 Set objArgs= WScript.Arguments 'Создаём объект WshArguments
 For lngI=0 To objArgs.Count-1  'Перебираю все папки, которые перетащили на скрипт
   FileName = objArgs(lngI)&".txt" 'Имя результируещего файла
   Set  FOut = objFSO.OpenTextFile (FileName,2,true)
    Set objFolder = objFSO.GetFolder(objArgs(lngI))
    ShowSubFolders(objFolder)   'Запускаю перебор подкаталогов
   FOut.Close
 Next 

Sub ShowSubFolders(objFolder)
 'Сначала просматриваю папки.
  Set colFolders = objFolder.SubFolders
  For Each objSubFolder In colFolders
    'WScript.Echo objSubFolder.Path     
    ShowSubFolders(objSubFolder) 
  Next
 ' Потом просматриваю файлы.
  Set colFiles = objFolder.Files
  For Each objFile In colFiles
    if Ucase(Right(objFile.Path,4))=".TXT" then
      'Set objFSO1 = WScript.CreateObject("Scripting.FileSystemObject")	
      Set  FSrc = objFSO.OpenTextFile(objFile.Path)	
      'FOut.WriteLine objFile.Path
      FOut.WriteLine(FSrc.ReadAll)
      FSrc.Close
    end if
  Next
End Sub
'==========================================  Окончание файла

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

Код:
'==========================================  Начало файла 
'Имя: SeparateObject.vbs
'Язык: VBScript 
'Описание: Разбивает объекты на отдельные файлы
'Использование: Cделать ярлык в автозагрузке, указать в качестве параметров 
'               пути к файлам, которые нужно разбивать
'========================================================== 
On Error Resume Next

set WshShell=WScript.CreateObject("WScript.Shell")
Dim lngI, objArgs, Files
Files = "("
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objArgs= WScript.Arguments 'Создаём объект WshArguments
For lngI=0 To objArgs.Count-1  'Перебираю все файлы, которые перетащили на скрипт
  IF lngI > 0 THEN Files = Files & " OR "
  Files = Files & "(TargetInstance.Name = '" & (objArgs(lngI)) & "')"
Next 
Files = Files & ")"
Files = Replace(Files,"\","\\")

Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery _ 
("SELECT * FROM __InstanceOperationEvent WITHIN 3 WHERE " & _ 
                    "TargetInstance ISA 'CIM_DataFile'" & _ 
                    " AND " & Files ) 
'WScript.Echo Files
Do While(True) 
  Set objReceivedEvent = objEvents.NextEvent 
  SeparateFile(objReceivedEvent.TargetInstance.Name)
Loop 
msgBox("End ")


Sub SeparateFile(FileName)
  Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
  IF objFSO.FileExists(FileName) THEN
    Do  
      Err.Clear
      WScript.Sleep  500
      Set TxtStream = objFSO.OpenTextFile(FileName)
    Loop Until(err.number = 0)
    Do While Not (TxtStream.atEndOfStream)
      Text = TxtStream.ReadLine 
      IF LEFT(TEXT,6) = "OBJECT" then
        OutFileName = Left(FileName, InStrRev(FileName,"\")) & ObjFileName(TEXT)
        IF objFSO.FileExists(OutFileName) THEN
          Set FOut = objFSO.OpenTextFile (OutFileName,2,true) 
          FileOpen = TRUE
        ELSE
          IF MsgBox("Create " & OutFileName & "?" , 4, OutFileName) = 6 THEN
            Set FOut = objFSO.OpenTextFile (OutFileName,2,true) 
            FileOpen = TRUE
          END IF
        END IF
      END IF
      IF FileOpen THEN FOut.WriteLine(Text)
      IF LEFT(TEXT,1) = "}" then
        IF FileOpen THEN 
          FOut.WriteLine("")
          FOut.Close 
        END IF
        FileOpen = FALSE
      END IF
    Loop
    TxtStream.Close
    objFSO.DeleteFile(FileName)
  END IF
END Sub 

Function ObjFileName(ObjString)
  Prefix = LCase(MID(ObjString,8,1))
  Number = MID(ObjString,InStr(8,ObjString," ")+1,LEN(ObjString))
  objName = MID(Number,InStr(1,Number," ")+1, LEN(ObjString))
  Number = LEFT(Number,InStr(1,Number," ")-1)
  ObjFileName = Prefix & Number & " - " & objName & ".txt"
END Function
'==========================================  Окончание файла
Имена файлов можете настроить под себя.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:03.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.