powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление строк в текстовом файле
18 сообщений из 18, страница 1 из 1
Удаление строк в текстовом файле
    #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
Удаление строк в текстовом файле
    #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
Удаление строк в текстовом файле
    #36867947
Фотография paveloder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предложенный мною метод работает долго, это просто один из вариантов решения
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #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
Удаление строк в текстовом файле
    #36868461
Фотография paveloder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю, должен быть способ через API (ShellExecute/CreateApplication..), т.е. вызвать текстовый редактор (Excel не подходит!) и в нем сделать замену.. но как, подскажите?
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36868484
fortik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
цель это и есть удалить лишние данные из текстовика и сохранить? или дальше будут преобразования?
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36868499
fortik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
могу предложить попробовать импортировать текстовый файл, затем с помощью msquery убрать все null записи и сохранить как новый текстовый файл
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36868516
Фотография paveloder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortik,

нужно свести данные к плоской таблице, затем эти данные быстро грузятся в Access с помощью DoCmd.TransferText при помощи сохраненной спецификации (в цикле по всем файлам)
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36868533
fortik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а все равно пример файла открыть не могу(
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36868545
Фотография paveloder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вложил текстовик
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36868547
fortik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может лучше docmd.transfertext в таком виде как есть, а там через пару запросов добиться нужного вида? и побыстрее будет
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36868569
fortik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
импортировал с разделителем | в Access, поставил Field 2 в спецификации date, потом удалить все где Field2=null
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #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
Удаление строк в текстовом файле
    #36868845
Фотография paveloder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121,

спасибо, то что нужно!
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36869446
fortik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а сколько времени занимает преобразование одного файла?
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36869451
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fortik, пример - 0 сек.
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #36869466
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Размножил на 30300 строк - 1.18 сек.
...
Рейтинг: 0 / 0
Удаление строк в текстовом файле
    #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
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление строк в текстовом файле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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