Страницы: 1
RSS
Замена текста по образцу., Как заменить найти и заменить текст в ТХТ (XML) файле?
 
Есть ТХТ  Файл где надо  найти  значения записанные примерно так

Код
?xml version="1.0" encoding="windows-1251"?><LandXML date="" time="" version="1.1" language="English" readOnly="false"><Units><Metric areaUnit="squareMeter" linearUnit="meter" volumeUnit="cubicMeter" temperatureUnit="celsius" pressureUnit="milliBars" diameterUnit="millimeter" angularUnit="decimal degrees" directionUnit="decimal degrees" /></Units><ProjectionOf name="None" /><Application name="PlanMachine" desc="" manufacturer="Иркутскжелдорпроект" version="0.00000001" manufacturerURL="" timeStamp="" /><Alignments name=""><Alignment name="I" length="20522.3597464337" staStart="0" desc=""><Feature name="IrregularPickets" /><CoordGeom><Line length="101.19541"><Start>663894.452737859 -6160205.42335494</Start><End>663794.791098493 -6160222.97523945</End><Feature name="Id">93732ad2-6c73-475b-87f9-353e5f2c7a40</Feature><Feature name="StartPicketage">139 8 90.5825979747506</Feature><Feature name="EndPicketage">139 9 91.7785532183005</Feature></Line><Spiral length="39.9999903" radiusEnd="17000" radiusStart="INF" rot="cw" spiType="clothoid"><Start>663794.791098493 -6160222.97523945</Start><PI>663768.528622044 -6160227.60044884</PI><End>663755.400095167 -6160229.92850376</End><Feature name="StartPicketage">139 9 91.7785532183005</Feature><Feature name="EndPicketage">140 0 31.77838479367811</Feature></Spiral><Curve rot="cw" crvType="arc" length="18.9829428" radius="17000"><Start>663755.400095167 -6160229.92850376</Start><Center>666723.667746728 -6176968.7871013</Center><End>663736.71060873 -6160233.25343621</End><PI>663746.054419358 -6160231.58575324</PI><Feature name="StartPicketage">140 0 31.77838479367811</Feature><Feature name="EndPicketage">140 0 50.7611466438122</Feature><Feature name="CantMm">0</Feature><Constraints><Canting auto="" /></Constraints></Curve><Spiral length="39.9999903" radiusEnd="INF" radiusStart="17000" rot="cw" spiType="clothoid"><Start>663736.71060873 -6160233.25343621</Start><PI>663723.584708483 -6160235.59614631</PI><End>663697.338418795 -6160240.31245082</End><Feature name="StartPicketage">140 0 50.7611466440487</Feature><Feature name="EndPicketage">140 0 90.7615318143386</Feature></Spiral><Line length="16.6361905"><Start>663697.338418795 -6160240.31245082</Start><End>663680.964485092 -6160243.25475088</End><Feature name="Id">50028b58-6d2f-4f80-8658-bd5774abb1dd</Feature><Feature name="StartPicketage">140 0 90.7615318143386</Feature><Feature name="EndPicketage">140 1 7.39783668264487</Feature></Line><Spiral length="19.999968" radiusEnd="40000" radiusStart="INF" rot="ccw" spiType="clothoid"><Start>663680.964485092 -6160243.25475088</Start><PI>663667.84135952 -6160245.6128987</PI><End>663661.279506631 -6160246.79033296</End><Feature name="StartPicketage">140 1 7.39783668264487</Feature><Feature name="EndPicketage">140 1 27.39757821128413</Feature></Spiral><Curve rot="ccw" crvType="arc" length="68.6794469" radius="40000"><Start>663661.279506631 -6160246.79033296</Start>
меня интересует именно <Start>663894.452737859 -6160205.42335494</Start><End>663794.791098493 -6160222.97523945
составил табличку.
не правильные
                       правильные
663894.452737859   -6160205.42335494    6160205.42335494   663894.452737859
табличка не работает
значений много. как с помощью макроса найти значения из правой ячейки и поменять их на значения из левой?
или как  сделать преобразования  значений  сразу в правильные.   ( оба значения должны быть положительными и их надо поменять местами)

Изменено: drauzer - 12.10.2017 12:22:09
 
В правила заглядывали? Что там написано по поводу файла-примера?
 
Цитата
vikttur написал:
Что там написано по поводу файла-примера?
Файл примера 1,4 Мб весит а допуск 100кб.   -    не проходит  
 
Заблуждаетесь. Это РАБОЧИЙ файл, а не пример.
 
Исправился ;) Файл примера в тхт  но по факту это XML. ( который должен быть еще и в строчку записан.)
 
Здравствуйте.Раз исправились, то держите пример. :)
Скрытый текст
Изменено: Doober - 12.10.2017 15:01:52
 
Doober  Спасибо :).

только я  не могу понять как работает скрипт.  
XPath = "//Start"   ( я так понимаю начинает работать с  <Start>  </Start>)


а вот к примеру  есть <Point name="11" cameFromLiveInterop="True" picketage="139 1 64.998" seqNo="11">664538.194 -6159896.711 0</Point>
тут достаточно  XPath = "//Point"   ?   и нолик останется на месте?
Изменено: drauzer - 12.10.2017 16:37:00
 
нолик не при делах. Почитайте.
 
Doober, все на английском :)  (английский в школе мимо меня прошел :(  )
Код
    Next
    XPath = "//NodeLocation"
    Set objListOfNodes = xmlDoc.SelectNodes(XPath)
    For n = 0 To objListOfNodes.Length - 1
        Set NodeLocationNode = objListOfNodes(n)
        NodeLocationText = NodeLocationNode.Text
        If InStr(1, NodeLocationText, "-", vbTextCompare) > 0 Then
            NodeLocationR = Split(NodeLocationText, "-")
            NodeLocationNode.Text = NodeLocationR(1) & " " & NodeLocationR(0)
        End If
    Next

Для каждого  элемента надо менять все что красным. А как это делать в пару кликов? а не ручками копи паст?

Спасибо за ссылку   буду учится по тихоньку.
 
Изменено: drauzer - 13.10.2017 11:47:32
 
Цитата
учится по тихоньку
Это учебник такой - "тихонька"? :)

Код в сообщении следует оформлять с помощью кнопки <...>. Вместо выделения цветом достаточно написать: "Заменить везде NodeLocation"
 
Цитата
vikttur написал:
Код в сообщении следует оформлять с помощью кнопки  . Вместо выделения цветом достаточно написать: "Заменить везде NodeLocation"
Я что-то в  "Microsoft Visual Basic fof Application" - изначально не заметил . Думаю  через  ( Ctrl+H )  удобнее будет кусок код менять.
Код
Sub Replace_xml()
    Dim xmlDoc
    Dim iTrek
    With Application.FileDialog(msoFileDialogOpen)
        If .Show = 0 Then MsgBox "Файл не выбран!", 64, "ошибка": Exit Sub
        iTrek = .SelectedItems(1)
End With
    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    xmlDoc.async = False
    xmlDoc.validateOnParse = False
    strFilePath = iTrek
    xmlDoc.Load (strFilePath)
    Dim objListOfNodes
    xmlDoc.setProperty "SelectionLanguage", "XPath"
    XPath = "//Start"
    Set objListOfNodes = xmlDoc.SelectNodes(XPath)
    For n = 0 To objListOfNodes.Length - 1
        Set StartNode = objListOfNodes(n)
        StartText = StartNode.Text
        If InStr(1, StartText, "-", vbTextCompare) > 0 Then
            StartR = Split(StartText, "-")
            StartNode.Text = StartR(1) & " " & StartR(0)
 
        End If
    Next
    XPath = "//End"
    Set objListOfNodes = xmlDoc.SelectNodes(XPath)
    For n = 0 To objListOfNodes.Length - 1
        Set EndNode = objListOfNodes(n)
        EndText = EndNode.Text
        If InStr(1, EndText, "-", vbTextCompare) > 0 Then
            EndR = Split(EndText, "-")
            EndNode.Text = EndR(1) & " " & EndR(0)
        End If
    Next
    XPath = "//PI"
    Set objListOfNodes = xmlDoc.SelectNodes(XPath)
    For n = 0 To objListOfNodes.Length - 1
        Set PINode = objListOfNodes(n)
        PIText = PINode.Text
        If InStr(1, PIText, "-", vbTextCompare) > 0 Then
            PIR = Split(PIText, "-")
            PINode.Text = PIR(1) & " " & PIR(0)
        End If
    Next
    XPath = "//Center"
    Set objListOfNodes = xmlDoc.SelectNodes(XPath)
    For n = 0 To objListOfNodes.Length - 1
        Set CenterNode = objListOfNodes(n)
        CenterText = CenterNode.Text
        If InStr(1, CenterText, "-", vbTextCompare) > 0 Then
            CenterR = Split(CenterText, "-")
            CenterNode.Text = CenterR(1) & " " & CenterR(0)
        End If
        Next
    XPath = "//NodeLocation"
    Set objListOfNodes = xmlDoc.SelectNodes(XPath)
    For n = 0 To objListOfNodes.Length - 1
        Set NodeLocationNode = objListOfNodes(n)
        NodeLocationText = NodeLocationNode.Text
        If InStr(1, NodeLocationText, "-", vbTextCompare) > 0 Then
            NodeLocationR = Split(NodeLocationText, "-")
            NodeLocationNode.Text = NodeLocationR(1) & " " & NodeLocationR(0)
        End If
    Next
    XPath = "//Point"
    Set objListOfNodes = xmlDoc.SelectNodes(XPath)
    For n = 0 To objListOfNodes.Length - 1
        Set PointNode = objListOfNodes(n)
        PointText = PointNode.Text
        If InStr(1, PointText, "-", vbTextCompare) > 0 Then
           PointR = Split(PointText, "-")
           PointNode.Text = PointR(1) & " " & PointR(0)
        End If
        
     Next
    xmlDoc.Save strFilePath
End Sub
Вот сам код в друг кому понадобится.
при запуске спрашивает где лежит файл и сразу его меняет!!!!
Все действия проводите только после создания копии.
Изменено: drauzer - 13.10.2017 13:44:50
Страницы: 1
Наверх