<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Подстановка значений из одного тектового файла в другой]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6215&amp;type=atom" />
	<updated>2011-09-28T14:08:25Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6215</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51929#p51929" />
			<content type="html"><![CDATA[<p>Спасибо. Профессионально.</p>]]></content>
			<author>
				<name><![CDATA[2vv]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=4528</uri>
			</author>
			<updated>2011-09-28T14:08:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51929#p51929</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51917#p51917" />
			<content type="html"><![CDATA[<p>Из первого файла-источника построчно читаем текст. Каждую прочитанную строку разбиваем по разделителю «;» и заносим полученные части в массив. Тут же заносим эти данные в коллекцию: первый элемент массива (часть прочитанной строки <em>до</em> разделителя «;») — ключ, идентификатор, уникальное значение, однозначно определяющее данный элемент коллекции среди прочих, и второй элемент массива (часть прочитанной строки <em>после</em> разделителя «;») — значение этого элемента коллекции.</p><p>Из второго файла-источника построчно читаем текст. Каждую прочитанную строку разбиваем по разделителю «;» и заносим полученные части в массив. Затем проверяем: если в коллекции существует элемент с таким же ключом, как у первого элемента массива (часть прочитанной строки <em>до первого</em> разделителя «;»), то заменяем второй элемент массива (часть прочитанной строки <em>после первого</em> и <em>до второго</em> разделителей «;») на значение элемента коллекции. Полученный массив сливаем в строку, которую пишем в результирующий файл.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-09-28T00:40:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51917#p51917</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51903#p51903" />
			<content type="html"><![CDATA[<p>Алгоритм не очень ясен.</p>]]></content>
			<author>
				<name><![CDATA[2vv]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=4528</uri>
			</author>
			<updated>2011-09-27T13:18:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51903#p51903</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51678#p51678" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>Теперь бы разобраться как он работает.</p></blockquote></div><p>Что непонятно — спрашивайте.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-09-19T14:51:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51678#p51678</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51675#p51675" />
			<content type="html"><![CDATA[<p><strong>alexii</strong> Работает хорошо. Спасибо. Теперь бы разобраться как он работает. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Всем спасибо за помощь.!</p>]]></content>
			<author>
				<name><![CDATA[2vv]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=4528</uri>
			</author>
			<updated>2011-09-19T13:57:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51675#p51675</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51662#p51662" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Mickey666x пишет:</cite><blockquote><p>Не очень ясная задача. Скрипт ведь должен за чтото зацепиться.</p></blockquote></div><p>Цепляйтесь за <em>все</em> совпадения.<br /></p><div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>Количество строк в File2 - значительно больше</p></blockquote></div><p>«значительно больше» — это сколько?</p><div class="codebox"><pre><code>Option Explicit

&#039; IOMode Enum
Const ForReading   = 1
Const ForWriting   = 2


Dim objTSDest

Dim strFileSourceIn
Dim strFileSourceOut
Dim strFileDest
Dim strBAKFileSourceOut

Dim arrValues
Dim objDictionary


Set objDictionary = WScript.CreateObject(&quot;Scripting.Dictionary&quot;)

strFileSourceIn = &quot;E:\Песочница\0073\FileSourceIn.txt&quot;
strFileSourceOut = &quot;E:\Песочница\0073\FileSourceOut.txt&quot;

strFileDest = GetTemporaryName()

With WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
    With .OpenTextFile(strFileSourceIn, ForReading)
        Do Until .AtEndOfStream
            arrValues = Split(.ReadLine, &quot;;&quot;)
            objDictionary.Add arrValues(0), arrValues(1)
        Loop
        
        .Close
    End With
    
    Set objTSDest = .CreateTextFile(strFileDest)
    
    With .OpenTextFile(strFileSourceOut, ForReading)
        Do Until .AtEndOfStream
            arrValues = Split(.ReadLine, &quot;;&quot;)
            
            If objDictionary.Exists(arrValues(0)) Then
                arrValues(1) = objDictionary(arrValues(0))
            End If
            
            objTSDest.WriteLine Join(arrValues, &quot;;&quot;)
        Loop
        
        .Close
    End With
    
    objTSDest.Close
    
    strBAKFileSourceOut = .BuildPath(.GetParentFolderName(.GetAbsolutePathName(strFileSourceOut)), .GetBaseName(strFileSourceOut) &amp; &quot;.bak&quot;)
    
    If .FileExists(strBAKFileSourceOut) Then
        .DeleteFile strBAKFileSourceOut, True
    End If
    
    .MoveFile strFileSourceOut, strBAKFileSourceOut
    .CopyFile strFileDest, strFileSourceOut, True
    .DeleteFile strFileDest, True
End With

WScript.Quit 0
&#039;=============================================================================

&#039;=============================================================================
Function GetTemporaryName()
    Const TemporaryFolder = 2
    
    Dim strTempName
    
    With WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;)
        Do
            strTempName = .BuildPath(.GetSpecialFolder(TemporaryFolder), .GetTempName)
        Loop While .FileExists(strTempName) Or .FolderExists(strTempName)
    End With
    
    GetTemporaryName = strTempName
End Function
&#039;=============================================================================</code></pre></div><p>Поддержку передачи имён входных/выходных файлов посредством аргументов командной строки оставляю на Вашу проработку.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-09-18T16:37:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51662#p51662</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51658#p51658" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>105;;XX<br />105;;XX<br />105;;XX<br />107;;XX<br />110;;XX<br />108;;XX<br />108;;XX<br />110;;XX</p></blockquote></div><p>Как я понял данные с первого столбика могут повторятся... Не очень ясная задача. Скрипт ведь должен за чтото зацепиться. <br /></p><div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>И еще, в принципе необязательно создавать третий файл, можно производить изменение во втором (на основании первого).</p></blockquote></div><p>3 файл необходимо создавать, т. к. файл либо открывается для чтения (писать в нем нельзя), либо для записи (читать нельзя). Как вариант: Создается третий файл, сохраняется, удаляется второй, третий переименовывается.</p>]]></content>
			<author>
				<name><![CDATA[Mickey666x]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26846</uri>
			</author>
			<updated>2011-09-18T15:35:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51658#p51658</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51651#p51651" />
			<content type="html"><![CDATA[<p><strong>Mickey666x</strong><br />&nbsp; Извиняюсь, но что-то не так. Вот содержимое file3:<br />105;Petrov;ingener<br />106;Ivanov;manager<br />107;Sidorov</p><p><strong>alexii</strong><br />Структура такая&nbsp; и есть.Количество строк в file1(список) - около сотни. Количество строк в File2 - значительно больше и выглядеть он может так:<br />105;;XX<br />105;;XX<br />105;;XX<br />107;;XX<br />110;;XX<br />108;;XX<br />108;;XX<br />110;;XX</p><p>XX - Любое слово или строка.<br />Нужно после первого значения , например 105, поставить соответствующее слово из file1.<br />И еще, в принципе необязательно создавать третий файл, можно производить изменение во втором (на основании первого) .</p>]]></content>
			<author>
				<name><![CDATA[2vv]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=4528</uri>
			</author>
			<updated>2011-09-18T12:15:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51651#p51651</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51510#p51510" />
			<content type="html"><![CDATA[<p>Пробуй!</p><div class="codebox"><pre><code>Dim FSO
Dim file1
Dim file3
Dim Txt1
Dim Txt3
Dim N
Dim Z

Set FSO=CreateObject(&quot;Scripting.FileSystemObject&quot;) &#039;подключаем filesystemobject
Set file1 = FSO.OpenTextFile(&quot;C:\File1.csv&quot;, 1, False) &#039;открыть только для чтения
Set file3 = FSO.CreateTextFile(&quot;C:\File3.csv&quot;)&#039;Создаем текстовый файл
Z = 0
Do While File1.AtEndOfStream &lt;&gt; True
    Txt1 = File1.ReadLine
    Call Num(N, Txt1)
    Call Search(N, Txt3)
    Z = Z + 1
Loop
file1.Close
file3.Close
MsgBox &quot;Ok! Создано &quot; &amp; Z &amp; &quot; cтрок.&quot;
WScript.Quit

Sub Search(N, Txt3)
    Dim file2
    Dim Txt2
    Dim TxtX
    Set file2 = FSO.OpenTextFile(&quot;C:\File2.csv&quot;, 1, False) &#039;открыть только для чтения
    Do While File2.AtEndOfStream &lt;&gt; True
        Txt2 = File2.ReadLine
        If InStr(Txt2, N ) &gt; 0 Then
            TxtX = Right(Txt2,Len(Txt2) - Len(N) - 1)
            Txt3 = Txt1 &amp; TxtX
            Exit Do
        Else
            Txt3 = Txt1
        End If
    Loop
    file3.WriteLine(Txt3)
    file2.Close
End Sub

Sub Num(N, Txt1)
    Dim X
    Dim Y
    N = &quot;&quot;
    X = 0
    Do
        X = X + 1
        Y = Mid (Txt1, X, 1)
        If Y = &quot;;&quot; Then
            Exit Sub
        Else
            N = N &amp; Y
        End If
    Loop Until Len(Txt1) = X
End Sub</code></pre></div><p>Если что обращайся!</p>]]></content>
			<author>
				<name><![CDATA[Mickey666x]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26846</uri>
			</author>
			<updated>2011-09-14T15:48:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51510#p51510</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51509#p51509" />
			<content type="html"><![CDATA[<p><strong>2vv</strong>, сколько примерно строк в обоих файлах? Покажите реальные куски файлов: нужно увидеть всю структуру CSV.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-09-14T15:26:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51509#p51509</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51508#p51508" />
			<content type="html"><![CDATA[<p>БОльшое спасибо.<br />Да, там не всегда трехзначные номера. Может быть и 4 цифры и буквы. Но символов не более 6-ти.</p>]]></content>
			<author>
				<name><![CDATA[2vv]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=4528</uri>
			</author>
			<updated>2011-09-14T15:14:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51508#p51508</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51507#p51507" />
			<content type="html"><![CDATA[<p>Во первых. Ты файлы местами наверное поменял (То есть в первом файле должны быть фамилии, во втором должности); во вторых этот скрипт написал для 3-х значных порядковых номеров. У меня все отлично получается! Если есть необходимость могу еще посидеть и сделать для любых порядковых номеров.</p>]]></content>
			<author>
				<name><![CDATA[Mickey666x]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26846</uri>
			</author>
			<updated>2011-09-14T14:19:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51507#p51507</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51504#p51504" />
			<content type="html"><![CDATA[<p><strong>Mickey666x</strong><br />Спасибо. Работает частично. Надо чуть чуть поправить.&nbsp; На выходе почему-то получается такое: <br />105;;ingener05;petrov<br />107;;manager05;petrov</p>]]></content>
			<author>
				<name><![CDATA[2vv]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=4528</uri>
			</author>
			<updated>2011-09-14T11:38:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51504#p51504</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51492#p51492" />
			<content type="html"><![CDATA[<p>Должно работать!</p><div class="codebox"><pre><code>Dim FSO
Dim file1
Dim file3
Dim Txt1
Dim Txt3
Dim N

Set FSO=CreateObject(&quot;Scripting.FileSystemObject&quot;) &#039;подключаем filesystemobject
Set file1 = FSO.OpenTextFile(&quot;C:\File1.csv&quot;, 1, False) &#039;открыть только для чтения
Set file3 = FSO.CreateTextFile(&quot;C:\File3.csv&quot;)&#039;Создаем текстовый файл

Do While File1.AtEndOfStream &lt;&gt; True
    Txt1 = File1.ReadLine
    N = Mid(txt1,1,3)
    Call Search(N, Txt3)
Loop
file1.Close
file3.Close
MsgBox &quot;Ok!&quot;
WScript.Quit

Sub Search(N, Txt3)
    Dim file2
    Dim Txt2
    Dim TxtX
    Set file2 = FSO.OpenTextFile(&quot;C:\File2.csv&quot;, 1, False) &#039;открыть только для чтения
    Do While File2.AtEndOfStream &lt;&gt; True
        Txt2 = File2.ReadLine
        
        If InStr(Txt2, N ) &gt; 0 Then
            TxtX = Right(Txt2,Len(Txt2) - 4)
            Txt3 = Txt1 &amp; TxtX
            Exit Do
        Else
            Txt3 = Txt1
        End If
    Loop
    file3.WriteLine(Txt3)
    file2.Close
End Sub</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Mickey666x]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26846</uri>
			</author>
			<updated>2011-09-13T17:40:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51492#p51492</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Подстановка значений из одного тектового файла в другой]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=51489#p51489" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>Добрый день.<br />Возможно-ли решить следующую задачку средствами VBS.?<br />Спасибо.</p></blockquote></div><p>Ответ: возможно<br />Пользуясь поиском по форуму можно обнаружить как читать - писать текстовые файлы. А как сравнивать строковые данные это и без форума понятно.</p>]]></content>
			<author>
				<name><![CDATA[Mat Skywalker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26275</uri>
			</author>
			<updated>2011-09-13T14:51:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=51489#p51489</id>
		</entry>
</feed>
