Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/84: Рейтинг темы: голосов - 84, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 31

Как из текстовых файлов прочитать нужные строки

02.10.2012, 01:39. Показов 17580. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Вопрос по VBA - EXCEL

На C:\ имею *.txt файлы (прикреплены)
Из этих файлов необходимо вытащить строки, начинающиеся с "6. Стеллажи", сохранить эти строки где-либо в каком-либо формате (excel, к примеру), удалить эти строки из этих файлов, все сохранить соответственно.

(специально в одном из файлов текст "6. Стеллажи" отсутствует)

Спасибо!!!!!
Вложения
Тип файла: txt 1.txt (490 байт, 111 просмотров)
Тип файла: txt 2.txt (296 байт, 47 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2012, 01:39
Ответы с готовыми решениями:

Как быстро прочитать много текстовых файлов в папке
День добрый. Столкнулся с проблемой, в папке очень много xml файлов (около 1000). Нужно быстро сделать по ним выборку. Почитал что...

Прочитать названия текстовых файлов из папки и дату их создания
Написать программу, которая считает названия текстовых файлов из папки и дату их создания. Вывести в другой текстовый документ или...

Записать в файл и прочитать две текстовых строки
Составьте программу, предназначенную для записи информации в файл и чтения информации из файла в виду двух строк. В первой строке...

7
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
02.10.2012, 11:15
Создаст новую книгу с найденными строками
Visual Basic
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
Sub bb()
Const FLDR = "c:\temp\"     'папка с файлами
Dim s$, f$, k1%, k2%, b As Boolean, i&
With Workbooks.Add(xlWBATWorksheet).Sheets(1)
    f = Dir(FLDR & "*.txt")
    While f <> ""
        k1 = FreeFile
        Open FLDR & f For Input Access Read As #k1
        k2 = FreeFile
        Open FLDR & "~" & f For Output Access Write As #k2
        b = False
        While Not EOF(k1)
            Line Input #k1, s
            If s Like "*6. Стеллажи*" Then
                i = i + 1
                .Cells(i, 1) = s
                b = True
            Else
                Print #k2, s
            End If
        Wend
        Close k1, k2
        If b Then   'строки были найдены, заменить старый файл на новый
            Kill FLDR & f
            Name FLDR & "~" & f As FLDR & f
        Else        'строки не найдены, удалить новый файл
            Kill FLDR & "~" & f
        End If
        f = Dir
    Wend
End With
End Sub
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
02.10.2012, 11:40
vldmlt, при работе с текстовыми файлами, есть такие особенности:
  1. в текстовых файлах нельзя получить доступ к определённой строке - нужно все строки просматривать. Например, если вы точно знаете, что тебе нужна строка под номером 100, вам всё-равно нужно пройитись по строкам от 1 до 99;
  2. в текстовый файл нельзя добавить строку (только в конец текстового файла можно добавить строку);
  3. в текстовом файле нельзя удалить строку. Если нужно удалить строку из текстового файла, нужно создать новый текстовый файл и туда копировать строки из существующего текстового файла. Если какая-то строка не нужна, то её не нужно копировать в новый текстовый файл.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 31
02.10.2012, 11:55  [ТС]
Супер!
Спасибо!

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

Т.е. :
В тексовом файле: (ТАБ)6. Стеллажи(ТАБ)1. РАЗМ на стеллаж(ТАБ)7332543169313(ТАБ)5(ТАБ)11A92

А в новой книге получилось: 6. Стеллажи1. РАЗМ на стеллаж7332543169313511A92



Добавлено через 4 минуты
Цитата Сообщение от Скрипт Посмотреть сообщение
vldmlt, при работе с текстовыми файлами, есть такие особенности:
  1. в текстовых файлах нельзя получить доступ к определённой строке - нужно все строки просматривать. Например, если вы точно знаете, что тебе нужна строка под номером 100, вам всё-равно нужно пройитись по строкам от 1 до 99;
  2. в текстовый файл нельзя добавить строку (только в конец текстового файла можно добавить строку);
  3. в текстовом файле нельзя удалить строку. Если нужно удалить строку из текстового файла, нужно создать новый текстовый файл и туда копировать строки из существующего текстового файла. Если какая-то строка не нужна, то её не нужно копировать в новый текстовый файл.

Принял к сведению.
Но тем не менее скрипт выше от Казанского - все сделал (только с нюансом, о котором уже написал)

Еще раз - спасибо!
0
1234 / 424 / 107
Регистрация: 31.03.2012
Сообщений: 1,159
02.10.2012, 12:33
Лучший ответ Сообщение было отмечено как решение

Решение

Извращение на cscript:
запускать из командой строки: cscript имя_этого_файла_с_расширением_vbs или в проводнике двойным кликом на имя_этого_файла_с_расширением_vbs
Кликните здесь для просмотра всего текста
Visual Basic
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Option Explicit
 
Const xlNormal = -4143
Const ForReading = 1, ForWriting = 2
 
Const namefile  = "1.txt"   ' будет обработан файл с этим именем в текущем каталоге
Const copyfile  = "1.~!~"  ' имя временного файла, в конце работы удалим
Const excelfile = "1.xls"     ' будет создан новый файл Excel'я (или он же без вопросов перезаписан)
Const findtext  = "6. Стеллажи"   ' искомый текст
 
Dim s, R, i, j
Dim oWsh, fso
Dim oEA, oWB, InFile, OutFile
Dim mArray, v
 
Set oWsh = WScript.CreateObject("WScript.Shell")
Set fso  = CreateObject("Scripting.FileSystemObject")
 
' создадим копию файла
Set InFile = fso.GetFile(oWSh.CurrentDirectory & "\" & namefile)
InFile.Copy(oWSh.CurrentDirectory & "\" & copyfile)
 
' Из копии читаем, в оригинальный пишем те строки в которых отсутствуют искомый текст
Set InFile  = fso.OpenTextFile(oWSh.CurrentDirectory & "\" & copyfile, ForReading)
Set OutFile = fso.OpenTextFile(oWSh.CurrentDirectory & "\" & namefile, ForWriting)
 
Set oEA = CreateObject("Excel.Application")
Set oWB = oEA.Workbooks.Add     'Open(oWSh.CurrentDirectory & "\" & excelfile)
 
For i = oEA.Sheets.count To 2 Step -1
  oWB.Sheets(i).Delete
Next
oWB.sheets(1).name = "Мой лист в новой книге Excel"
 
i = 0
Do While Not InFile.AtEndOfStream
  s = InFile.ReadLine
  If InStr(1, s, findtext) Then
    ' Нашли - пишем в ёксель
    i = i +1
    j = 0
    mArray = Split(s, Chr(09), -1, 1) ' В соответствии с приложеными файлами - разделитель полей табуляция
    For Each v In mArray
      j = j + 1
      With oWB.Sheets(1).cells(i, j)
        .NumberFormat = "@"
        .formulaR1C1 = v
      End With
    Next
  Else
    ' Не нашли - пишем в оригинальный файл
    OutFile.WriteLine s
  End If
Loop
 
OutFile.Close
InFile.Close
 
' Удалим копию файла
Set InFile = fso.GetFile(oWSh.CurrentDirectory & "\" & copyfile)
InFile.Delete
 
oEA.DisplayAlerts = false
Call oWB.SaveAs(oWSh.CurrentDirectory & "\" & excelfile, xlNormal)
oEA.Quit
 
Set oEA     = Nothing
Set Infile  = Nothing
Set OutFile = Nothing
 
WScript.Echo "Обработан файл - " & oWSh.CurrentDirectory & "\" & namefile & vbNewLine & _
            "Создан Excel файл - " & oWSh.CurrentDirectory & "\" & excelfile


Добавлено через 15 минут
Да сам скрипт и обрабатываемые файлы должны находится в одном и том же каталоге
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
02.10.2012, 12:36
Цитата Сообщение от vldmlt Посмотреть сообщение
Только один нюанс - в новой книге потерялись символы (в текстом файле - это знак табуляции), разделяющие поля.
Т.е. :
В тексовом файле: (ТАБ)6. Стеллажи(ТАБ)1. РАЗМ на стеллаж(ТАБ)7332543169313(ТАБ)5(ТАБ)11A9 2
А в новой книге получилось: 6. Стеллажи1. РАЗМ на стеллаж7332543169313511A92
У меня не теряются (см. файл). Наверно, лучше складывать строки в текстовый файл, потом открывайте чем угодно.
Вложения
Тип файла: xls Лист1.xls (17.0 Кб, 63 просмотров)
1
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 31
02.10.2012, 13:29  [ТС]
Цитата Сообщение от Казанский Посмотреть сообщение
У меня не теряются (см. файл). Наверно, лучше складывать строки в текстовый файл, потом открывайте чем угодно.


Бррррр............

Открыл вложенный файл - символы табуляции отсутствуют.... Все в одну строку.

Может это от версии excel зависит????
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
02.10.2012, 13:50
Вот эти знаки_вопроса_в_квадратике и есть символы табуляции.
Разнести по ячейкам можно с помощью Данные - Текст по столбцам.
Миниатюры
Как из текстовых файлов прочитать нужные строки  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2012, 13:50
Помогаю со студенческими работами здесь

Как удалить повторяющиеся строки между текстовым файлом и массой текстовых файлов?
Есть папка с большим набором текстовых файлов (ее объем более 2ГБ). И есть текстовый файл не такой большой. Задача удалить повторяющаяся...

Удалить строки из текстовых файлов
foreach (var results in from first in File.ReadLines(@&quot;C:\Users\LowFrequencySound\Desktop\1.txt&quot;) from second...

Объединить строки двух текстовых файлов
Есть прога program lr_20; var b,l,a,m:string; e,n:text; f:char; begin write('Введите полное имя создоваемого файла: '); ...

Сравнить соответствующие строки двух текстовых файлов
Сравните соответствующие строки двух текстовых файлов. Если строки совпали, то запишите эту строку в результирующий текстовый файл. Вывести...

Удаление по заданному слову/символу строки из текстовых файлов
Есть 50 текстовых файлов, необходимо у всех удалить первые 4 строки, это шапки реестров начинаются эти строки с &quot;#&quot;. Нашел на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru