Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] замена текста в файле по шаблону (http://forum.oszone.net/showthread.php?t=210103)

dembel_zone 29-06-2011 12:21 1703553

замена текста в файле по шаблону
 
День добрый, форумчане.

помогите разобраться, есть задача, нет опыта))

Есть целевой файл-простой текстовик , есть исходный файл-таблица эксель с данными в двух колонках.

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

Вот что я наваял. При открытии пишет что файл бинарный и показывает в нем набор символов. Что не так?

Код:

Const ForReading    = 1
Const ForWriting    = 2
 
Set oXL = CreateObject("Excel.Application")
Set oXLSource = CreateObject("Excel.Application")
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("w:\VB\connections_4.txt", ForReading)
Set objFile2 = objFSO.OpenTextFile("c:\connections_4.txt", ForWriting)
 
 oXLSource.Visible = False
 Set oWBSource = oXLSource.Workbooks.Open("w:\VB\2.xls", ForReading)
 Set oSheetSource = oWBSource.Worksheets(1)
 
 Buffer = objFile.ReadAll
 
 
  For i = 1 To 50
        d_number=oSheetSource.Cells(i,1).value
        d_name=oSheetSource.Cells(i,2).value
        Buffer = Replace(Buffer, d_number, d_name, 1, -1, 1)
  Next 
 objFile2.Write Buffer
 objFile2.Close
 objFile.Close

 oWBSource.Close
 Set oSheetSource = Nothing
 Set oWBSource = Nothing
 oXLSource.Quit
 Set oXLSource = Nothing


megaloman 29-06-2011 13:54 1703587

Код:

fXLS = "H:\Delete\ggg.xls"              ' Где Excel-файл
fTxt1 = "H:\Delete\Целевой файл.txt"    ' Где Исходный текстовый файл
fTxt2 = "H:\Delete\Результат.txt"      ' Где Результат

Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.OpenTextFile(fTxt1, 1)
S = F.ReadAll
F.Close

Range1 = "A1"          ' В какой клетке первое данное

Set XL = CreateObject("Excel.Application")
XL.Visible = True
XL.Workbooks.Open fXLS

i = 0
Do While True
    Txt1 = XL.Range("A1").Offset(i, 0)
    If Txt1 = "" Then Exit Do
    Txt2 = XL.Range("A1").Offset(i, 1)
    S = Replace(S, CStr(Txt1), CStr(Txt2))
'    MsgBox CStr(Txt1) + "  " + CStr(Txt2)
    i = i + 1
Loop
' XL.ActiveWorkbook.Save
XL.Quit

Set F = FSO.CreateTextFile(fTxt2, True)
F.Write S
F.Close


dembel_zone 29-06-2011 15:01 1703635

Вложений: 1
Спасибо за ответ, но у меня до 66561 знака идут квадратики... что это? в моем примере тоже самое. скрин прилагается.

dembel_zone 30-06-2011 11:08 1704149

Вложений: 2
да, Ваш пример работает. прикреплю мое творчество, а то ведь больше спросить не у кого(

ferget 30-06-2011 11:42 1704176

квадратики от того что, кодировка utf-16 и файлы не txt, а xml

если сменить кодировку на ANSI, то работает

dembel_zone 30-06-2011 13:37 1704271

Премного благодарен! Куда плюсик ставить?)

4EJLO6PEK 29-12-2013 01:53 2280076

здравствуйте, тоже появилась необходимость сделать замену в текстовом файле заменить одни значения другими при этом это значение не целая строчка, а просто текст в произвольном месте, кроме замененного текста, все остальное должно остаться...значений около 300, попробовал вбить в excel макросы выше, ругается на синтаксис, прямо с первой строчки fXLS = "H:\Delete\ggg.xls" подскажите пожалуйста, как решить проблему? значение имени файла подставлял свои, кириллицу и пробелы не использовал

Iska 29-12-2013 01:57 2280077

4EJLO6PEK, для начала выложите Ваши файлы и укажите что, чем и как менять.

4EJLO6PEK 29-12-2013 03:45 2280108

текстовый файл вида
читать дальше »
004 AX AA C 00:00:21:22 00:00:32:21 00:00:04:16 00:00:15:15
* FROM CLIP NAME: MVI_6763.MOV

005 AX V C 00:00:23:12 00:00:28:21 00:00:15:15 00:00:20:24
* FROM CLIP NAME: MVI_6776.MOV

006 AX AA C 00:00:23:12 00:00:28:21 00:00:15:15 00:00:20:24
* FROM CLIP NAME: MVI_6776.MOV

007 AX AA/V C 00:00:41:04 00:00:45:23 00:00:20:24 00:00:25:18
* FROM CLIP NAME: MVI_6767.MOV

008 AX V C 00:00:45:23 00:00:46:03 00:00:25:18 00:00:25:23
* FROM CLIP NAME: MVI_6767.MOV

009 AX AA/V C 00:00:41:04 00:00:45:23 00:00:20:24 00:00:25:18
* FROM CLIP NAME: MVI_6767.MOV

010 AX V C 00:00:45:23 00:00:46:03 00:00:25:18 00:00:25:23
* FROM CLIP NAME: MVI_6767.MOV

011 AX V C 00:01:29:10 00:01:35:11 00:00:25:23 00:00:31:24
* FROM CLIP NAME: MVI_6765.MOV

012 AX AA C 00:01:29:10 00:01:35:11 00:00:25:23 00:00:31:24
* FROM CLIP NAME: MVI_6765.MOV

013 AX V C 00:01:14:23 00:01:18:18 00:00:31:24 00:00:35:19
* FROM CLIP NAME: MVI_6769.MOV

это из экспорта видео монтажа, а мне надо все MVI_????.MOV заменить на соответствующие им другие названия типа ?-?-?.mov
у меня есть эксель файл две колонки
MVI_6763.MOV 1-1-2.mov
MVI_6776.MOV 1-2-4.mov
MVI_6776.MOV 2-1-4.mov
и т.д.

Iska 29-12-2013 11:50 2280168

Выложить файлы — это означает: упаковать их в архив, и прикрепить последний к сообщению.

4EJLO6PEK 29-12-2013 15:40 2280244

Вложений: 1
Извините, думал примера достаточно
Файл 108476

Iska 29-12-2013 17:18 2280281

Вставьте следующий код:
читать дальше »
Код:

Option Explicit

Sub ReplaceInFile()
    Dim strFileName As String
    Dim strFileFullName As String
   
    Dim strContent As String
    Dim objRange As Range
   
   
    strFileName = "2new_4(sootvetstvuet).txt"
   
    With CreateObject("Scripting.FileSystemObject")
        strFileFullName = .Buildpath(ThisWorkbook.Path, strFileName)
       
        If .FileExists(strFileFullName) Then
            With .OpenTextFile(strFileFullName)
                strContent = .ReadAll()
                .Close
            End With
           
            .CopyFile strFileFullName, strFileFullName & ".bak", True
           
            With .CreateTextFile(strFileFullName, True)
                For Each objRange In ThisWorkbook.ActiveSheet.UsedRange.Rows
                    strContent = Replace(strContent, objRange.Cells(1, 1).Value, objRange.Cells(1, 2).Value)
                Next
               
                .Write strContent
                .Close
            End With
        Else
            MsgBox "File [" & strFileFullName & "] not found."
        End If
    End With
End Sub


в рабочую книгу «Книга1.xlsx», сделайте в ней активным рабочий лист со списком для замены, затем исполните процедуру «ReplaceInFile()». Ожидается, что текстовый файл «2new_4(sootvetstvuet).txt» будет находиться рядом с этой рабочей книгой.

4EJLO6PEK 29-12-2013 19:21 2280354

большое спасибо....все получилось


Время: 21:34.

Время: 21:34.
© OSzone.net 2001-