powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Работа с текстом в файле.
11 сообщений из 11, страница 1 из 1
Работа с текстом в файле.
    #36594232
vallot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В файле имеется список, повторяющиеся значения я уничтожаю
и убираю пробел в два захода в один и тот же файл.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  
                  1                    2     
 54789               54789            54789 
 54899  =           54899            54899 
 54549  =           54549            54549 
 54784               54784            54784 
 54899  =                             56689 
 56689               56689            54719 
 54549  =                             55729 
 54719               54719           
 55729               55729   
    


А нельзя сделать это за один заход?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
'=======================read file ==========================
       
       Open NameFile For Input As  1 
       i =  0 
            Do While Not EOF( 1 )
                i = i +  1 
                ReDim Preserve Text(i)
                Line Input # 1 , Text(i)
            Loop
            j = i
            Close # 1 
'=================delet equal lines===============
            Open NameFile For Output As  1 
            For i =  1  To j
               For k = i +  1  To j                
                 If Text(i) Like Text(k) Then Text(i) = ""               
               Next
                Print # 1 , Text(i)
            Next
            Close # 1 
'=======================read file==========================
       Open NameFileFor Input As  1 
       i =  0 
            Do While Not EOF( 1 )
                i = i +  1 
                ReDim Preserve Text(i)
                Line Input # 1 , Text(i)
            Loop
            j = i
            Close # 1 
'=================DELET EMPTY LINES===============
            Open NameFile For Output As  1 
            For i =  1  To j
                If Not Text(i) = "" Then Print # 1 , Text(i)
            Next
            Close # 1 
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36594857
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vallot, Вы опубликовали фрагмент файла, в котором нет ни полностью повторяющихся, ни пустых строк. К тому же непонятно, к чему в первом столбце кое-где присутствует знак равенста (влияющий, кстати, на расположение данных в полях '1' и '2') ?

"Значение" в Вашем вопросе - это строка или её часть? Судя по коду, строка?

Может быть проще приложить файл с некоторым набором записей?
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36595158
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде работает, но иначе - просто не записывет уже существующий элемент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Sub ttt()
'=======================read file ==========================
   NameFile = "C:\test.txt"
       Open NameFile For Input As  1 
        On Error Resume Next
    With New Collection
            
            Do While Not EOF( 1 )
                Line Input # 1 , temp
                .Add temp, temp
            Loop
            
            Close # 1 
                
            Open NameFile For Output As  1 
                
            For i =  1  To .Count
               Print # 1 , .Item(i)
            Next
            
            Close # 1 
            
        End With

End Sub
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36595179
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного переставил error:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Option Explicit

Sub ttt()
Dim NameFile$, temp$, i As Long
'=======================read file ==========================
   NameFile = "C:\test.txt"
       Open NameFile For Input As  1 
    With New Collection
            
        On Error Resume Next
            Do While Not EOF( 1 )
                Line Input # 1 , temp
                .Add temp, temp
            Loop
        On Error GoTo  0 
            
            Close # 1 
'=======================write file ==========================
            Open NameFile For Output As  1 
                
            For i =  1  To .Count
               Print # 1 , .Item(i)
            Next
            
            Close # 1 
            
        End With

End Sub
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36595202
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного коряво, и в другой файл, но за один заход (можно в конце переименование добавить):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Option Explicit

Sub ttt()
Dim NameFile$, temp$, i As Long
Dim NameFileTwo$
'=======================read file ==========================
   NameFile = "C:\test.txt"
   NameFileTwo = "C:\testTwo.txt"
       Open NameFile For Input As  1 
        Open NameFileTwo For Output As  2 

With New Collection
            
        On Error GoTo  2 
            Do While Not EOF( 1 )
                Line Input # 1 , temp
                .Add temp, temp: Print # 2 , temp
 2 :
            Loop
            
        On Error GoTo  0 
            
            Close # 1 
            Close # 2 
            
End With

End Sub
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36595906
vallot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To vlth.
Наверное я невнятно описал свои действия, поправлюсь.
Исходный файл с текстом (знаком = я показываю где одинаковые строки, на самом деле там их(=) нет):

54789
54899 =
54549 = =
54784
54899 =
56689
54549 = =
54719
55729
Повторяющиеся значения я уничтожаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
'=======================read file ==========================
       
       Open NameFile For Input As  1 
       i =  0 
            Do While Not EOF( 1 )
                i = i +  1 
                ReDim Preserve Text(i)
                Line Input # 1 , Text(i)
            Loop
            j = i
            Close # 1 
'=================delet equal lines===============
            Open NameFile For Output As  1 
            For i =  1  To j
               For k = i +  1  To j                
                 If Text(i) Like Text(k) Then Text(i) = ""               
               Next
                Print # 1 , Text(i)
            Next
            Close # 1 
Получаем такой текст:
54789
54899
54549
54784

56689

54719
55729

Потом убираю пробелы так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
'=======================read file==========================
       Open NameFileFor Input As  1 
       i =  0 
            Do While Not EOF( 1 )
                i = i +  1 
                ReDim Preserve Text(i)
                Line Input # 1 , Text(i)
            Loop
            j = i
            Close # 1 
'=================DELET EMPTY LINES===============
            Open NameFile For Output As  1 
            For i =  1  To j
                If Not Text(i) = "" Then Print # 1 , Text(i)
            Next
            Close # 1 
Результат:
54789
54899
54549
54784
56689
54719
55729
============================================

Для этого я дважды открываю файл.

Вот я и спрашивал, а за одно открытие для чтения и одно открытие для записи нельзя это сделать?
Прочитал и записал.
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36595945
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vallot, Вы не два раза, а 4 раза открывали. Два раза у меня - либо один и тот же файл сперва на чтение, потом его же на запись, либо один на чтение, а другой параллельно на запись.
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36595972
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Sub Example()
'ссылка на Microsoft ActiveX Data Objects 2.x Library
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
Dim strFilePath As String, strText As String

Const NameFile As String = "C:\Tmp\Tmp.txt"

strFilePath = Left(NameFile, InStrRev(NameFile, "\"))
With cn
    .Mode = adModeRead
    .Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & strFilePath & ";Extended Properties='text;HDR=No';"
End With
rs.CursorType = adOpenStatic
Set rs = cnTXT.Execute("SELECT DISTINCT * FROM " & Replace(NameFile, strFilePath, ""))
With rs
    Do Until .EOF
        strText = strText & rs( 0 ) & vbCrLf
        .MoveNext
    Loop
End With
cn.Close: Set cn = Nothing: Set rs = Nothing
Open NameFile For Output As # 1 
Print # 1 , strText
Close # 1 
End Sub
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36596081
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка. Должно быть
Код: plaintext
Set rs = cn.Execute(...
вместо
Код: plaintext
Set rs = cnTXT.Execute(...
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36596163
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то мой второй код и впрямь корявый - на втором повторе ошибку даёт... Но первый код работает - пишет на выход строки в порядке поступления. Код от vlth пишет уже отсортированные.
...
Рейтинг: 0 / 0
Работа с текстом в файле.
    #36596230
vallot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за советы.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Работа с текстом в файле.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]