Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление строк в текстовом файле / 18 сообщений из 18, страница 1 из 1
27.09.2010, 13:39
    #36867919
paveloder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
Необходимо в текстовом файле удалить лишние строки, оставив только шапку и данные. Все лишние строки однотипные, и их может быть не более пятнадцати. Всего строк может быть более 100 тыс. (а подобных файлов более 50). Пример файла во вложении.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub TextDelete(FullPath As String)
    Dim L As String
    Dim Str As String
    Dim RowNum As Long
    
    Open FullPath For Input As # 1 
    RowNum =  0 
    Do Until EOF( 1 )
        Line Input # 1 , L
        RowNum = RowNum +  1 
        If Not (Mid(L,  1 ,  3 ) Like "---" Or Mid(L,  1 ,  3 ) Like "|--" Or (Mid(L,  1 ,  3 ) Like "|да" And RowNum >  2 )) Then
            Str = IIf(Str = "", L, Str & Chr( 10 ) & L)
        End If
    Loop
    Close # 1 
    
    Open FullPath For Output As # 1 
    Print # 1 , Str
    Close # 1 
End Sub
...
Рейтинг: 0 / 0
27.09.2010, 13:54
    #36867943
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
paveloder,

вы используете chr(10), но в зависимости от принимающей системы переход строки должен быть( 4 типа)
Код: plaintext
1.
2.
3.
4.
chr( 13 )+chr( 10 )
chr( 10 )+chr( 13 )
chr( 13 )
chr( 10 )
некоторые программы подготовки текстовых отчетов используют еще и
Код: plaintext
chr( 12 ) 
для прогонки листа
да и писать в исходник весьма опасно. надежнее писать построчно во вторичный файл.
...
Рейтинг: 0 / 0
27.09.2010, 13:57
    #36867947
paveloder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
предложенный мною метод работает долго, это просто один из вариантов решения
...
Рейтинг: 0 / 0
27.09.2010, 14:33
    #36868024
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
paveloder,

Код: plaintext
1.
2.
3.
If Not (Mid(L,  1 ,  3 ) Like "---"
      Or Mid(L,  1 ,  3 ) Like "|--"
      Or (Mid(L,  1 ,  3 ) Like "|да" And RowNum >  2 )) Then
Эта строка не отработала как надо, после исправления вторично запустить не смогла(запорот исходник)

пришлось исправить программу и восстановить исходник из зипа для повторного пуска
...
Рейтинг: 0 / 0
27.09.2010, 17:34
    #36868461
paveloder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
думаю, должен быть способ через API (ShellExecute/CreateApplication..), т.е. вызвать текстовый редактор (Excel не подходит!) и в нем сделать замену.. но как, подскажите?
...
Рейтинг: 0 / 0
27.09.2010, 17:41
    #36868484
fortik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
цель это и есть удалить лишние данные из текстовика и сохранить? или дальше будут преобразования?
...
Рейтинг: 0 / 0
27.09.2010, 17:44
    #36868499
fortik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
могу предложить попробовать импортировать текстовый файл, затем с помощью msquery убрать все null записи и сохранить как новый текстовый файл
...
Рейтинг: 0 / 0
27.09.2010, 17:49
    #36868516
paveloder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
fortik,

нужно свести данные к плоской таблице, затем эти данные быстро грузятся в Access с помощью DoCmd.TransferText при помощи сохраненной спецификации (в цикле по всем файлам)
...
Рейтинг: 0 / 0
27.09.2010, 17:52
    #36868533
fortik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
а все равно пример файла открыть не могу(
...
Рейтинг: 0 / 0
27.09.2010, 17:55
    #36868545
paveloder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
вложил текстовик
...
Рейтинг: 0 / 0
27.09.2010, 17:55
    #36868547
fortik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
может лучше docmd.transfertext в таком виде как есть, а там через пару запросов добиться нужного вида? и побыстрее будет
...
Рейтинг: 0 / 0
27.09.2010, 18:01
    #36868569
fortik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
импортировал с разделителем | в Access, поставил Field 2 в спецификации date, потом удалить все где Field2=null
...
Рейтинг: 0 / 0
27.09.2010, 18:25
    #36868624
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
vbs:
Код: 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.
36.
37.
38.
39.
40.
41.
42.
	t = timer
	' FSO Constants
	Const ForReading   =  1 
	Const ForAppending	=  8 
	Const TristateUseDefault= - 2 
	
	' Variables
	Dim objFSO, objTS, objOTS, objfile, CountLines

	' Instantiate the object
	Set objFSO = CreateObject("Scripting.FileSystemObject")

	' open the text file read only
	Set objTS = objFSO.OpenTextFile("C:\temp\paveloder\Example.txt", ForReading, False, TristateUseDefault)
	' We now open the file to write it out
	If objFSO.FileExists("C:\temp\paveloder\Example2.txt") Then
		Set objOTS = objFSO.OpenTextFile("C:\temp\paveloder\Example2.txt", ForAppending) 'открываем итоговый файл для добавления записей
	Else
		Set objfile = objFSO.CreateTextFile("C:\temp\paveloder\Example2.txt")
		Set objfile = Nothing
		Set objOTS = objFSO.OpenTextFile("C:\temp\paveloder\Example2.txt", ForAppending)
	End if

	Do While objTS.AtEndOfStream <> True
		tmp = objTS.ReadLine()
		CountLines = CountLines +  1 
		if CountLines =  2  then objOTS.Write tmp & vbCrLf
		if CountLines >  2  then
		if Mid(tmp,  2 ,  3 ) = "---" or Mid(tmp,  2 ,  3 ) = "Дат" then
		else
		objOTS.Write tmp & vbCrLf
		end if
		end if
	Loop
	
	' Close all files after we read it in.
	objTS.Close
	Set objTS = Nothing
	objOTS.Close
	Set objOTS = Nothing
	Set objFSO = Nothing
t=timer-t
msgbox "OK! Run in " & t
...
Рейтинг: 0 / 0
27.09.2010, 22:03
    #36868845
paveloder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
Hugo121,

спасибо, то что нужно!
...
Рейтинг: 0 / 0
28.09.2010, 11:09
    #36869446
fortik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
а сколько времени занимает преобразование одного файла?
...
Рейтинг: 0 / 0
28.09.2010, 11:11
    #36869451
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
fortik, пример - 0 сек.
...
Рейтинг: 0 / 0
28.09.2010, 11:17
    #36869466
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
Размножил на 30300 строк - 1.18 сек.
...
Рейтинг: 0 / 0
28.09.2010, 11:37
    #36869540
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление строк в текстовом файле
paveloderfortik,

нужно свести данные к плоской таблице, затем эти данные быстро грузятся в Access с помощью DoCmd.TransferText при помощи сохраненной спецификации (в цикле по всем файлам)

слияние *.тхт в один файл с загрузкой в MDB одной процедурой
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Sub m100927()
'Необходимо поместить *.ТХТ в подбиблиотеку C:\temp\paveloder\
Dim s1, s2, s3
s1 = "C:\temp\paveloder\"
Reset
Open s1 & "rez_txt.txt" For Output As # 2 
Print # 2 , "P0|Дата|БЕ|Дебитор |Дебитор_т|Канал сбыт|СКК |Пробл_деб|ДЗ_аванс_с|э"
'имена для импорта или связи текстовой таблицы
'дата-дата
'остальные-текст(особенно ДЗ_аванс_с)
'
s2 = Dir(s1 & "example*.txt")
Do While s2 <> ""
Debug.Print s1; s2
TextDelete00 (s1 & s2)
s2 = Dir
Loop
Reset
s1 = "SELECT Rez_TXT.[Дата], Rez_TXT.[БЕ], Rez_TXT.[Дебитор], "
s1 = s1 & "Rez_TXT.[Дебитор_т], Rez_TXT.[Канал сбыт], Rez_TXT.[СКК], "
s1 = s1 & " Rez_TXT.[Пробл_деб],"
s1 = s1 & "CCUR(Rez_TXT.[ДЗ_аванс_с]) AS ДЗ_аванс_руб"
s1 = s1 & " into rez_mdb"
s1 = s1 & " FROM Rez_TXT;"
DoCmd.RunSQL s1
End Sub

Sub TextDelete00(FullPath As String)
    Dim L As String
    Dim Str As String
    Dim RowNum As Long
    
    Open FullPath For Input As # 1 
    RowNum =  0 
    Do Until EOF( 1 )
        Line Input # 1 , L
        RowNum = RowNum +  1 
        If Not (Mid(L,  1 ,  3 ) Like "---" Or Mid(L,  1 ,  3 ) Like "|--" Or Mid(L,  1 ,  3 ) Like "|Д*") Then
            Print # 2 , L
        End If
    Loop
    Close # 1 
    
End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление строк в текстовом файле / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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