Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Работа с текстом в файле. / 11 сообщений из 11, страница 1 из 1
23.04.2010, 11:41
    #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
23.04.2010, 14:35
    #36594857
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с текстом в файле.
vallot, Вы опубликовали фрагмент файла, в котором нет ни полностью повторяющихся, ни пустых строк. К тому же непонятно, к чему в первом столбце кое-где присутствует знак равенста (влияющий, кстати, на расположение данных в полях '1' и '2') ?

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

Может быть проще приложить файл с некоторым набором записей?
...
Рейтинг: 0 / 0
23.04.2010, 15:52
    #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
23.04.2010, 15:58
    #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
23.04.2010, 16:06
    #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
23.04.2010, 23:43
    #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
24.04.2010, 00:16
    #36595945
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с текстом в файле.
vallot, Вы не два раза, а 4 раза открывали. Два раза у меня - либо один и тот же файл сперва на чтение, потом его же на запись, либо один на чтение, а другой параллельно на запись.
...
Рейтинг: 0 / 0
24.04.2010, 00:52
    #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
24.04.2010, 10:40
    #36596081
vlth
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с текстом в файле.
Поправка. Должно быть
Код: plaintext
Set rs = cn.Execute(...
вместо
Код: plaintext
Set rs = cnTXT.Execute(...
...
Рейтинг: 0 / 0
24.04.2010, 13:30
    #36596163
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с текстом в файле.
Что-то мой второй код и впрямь корявый - на втором повторе ошибку даёт... Но первый код работает - пишет на выход строки в порядке поступления. Код от vlth пишет уже отсортированные.
...
Рейтинг: 0 / 0
24.04.2010, 15:01
    #36596230
vallot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с текстом в файле.
Всем спасибо за советы.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Работа с текстом в файле. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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