Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2012, 09:01   #1
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
Вопрос Загрузка текстового файла

Имеется текстовый файл, содержащий табличные данные (три значения через разделитель в каждой строке).
Есть стандартный шаблон документа, содержащий табличку с данными.

Нужно заполнить в документе значения в столбец таблицы на основе соответствия одного из столбцов значению поля в текстовом файле (значение в файле соответствует лишь единственному значению из таблицы).

В общем-то проблемы с реализацией особой нет, но есть неприятный для меня момент - приходится для каждой строки из таблицы перелопачивать весь текстовый файл на соответствия, что немного неправильно.

собственно сам вопрос: есть ли какой-либо объект (желательно, стандартный) наподобие TStrings в Delphi позволяющий добавлять, удалять строки и перемещаться по ним без связи с файлом. Смотрел TextStream, но это немного не то что мне нужно. Создавать Excel - лист тоже можно, но это как стрелять из пушки по воробьям.

т.е. по-сути, нужен объект - таблица, куда можно сложить все значения из текстового файла и удалять их по мере заполнения таблицы в документе.
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 31.03.2012 в 09:04.
DiemonStar вне форума Ответить с цитированием
Старый 31.03.2012, 20:53   #2
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Судя по Вашему описанию, каждая строка текстового файла это строка таблицы с определенным разделителем в VBA эту строку можно разбить массивом
lst = Split([Текст строки], [Разделитель])
В итоге массив lst ,будет иметь вид lst(0 to 2), где lst(0) - значение 1-го столбца, lst(1) - значение 2-го столбца, lst(2) - значение 3-го столбца, отсюда можно создать либо массивы колонок таблицы либо коллекции значений таблицы, и исходя из этих значений можно составить алгоритм создания вордовской таблицы
Пименов Александр вне форума Ответить с цитированием
Старый 31.03.2012, 23:16   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Спасибо, но я довольно хорошо знаком с этим методом. Да и парсить строки не впервой - тут проблем не вижу. Мне просто нужен объект для удобной работы с текстовым массивом.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 01.04.2012, 00:43   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Массив или коллекция строк?
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 01.04.2012, 10:08   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Массив или коллекция строк?
Не принципиально. Главное, чтобы можно было удалять строку из массива/коллекции в удобном мне месте.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 01.04.2012, 11:05   #6
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Тогда лучше создать коллекцию, например:
Код:
Public mRows As Collection ' Коллекция строк видимая для всех модулей и процедур
Здесь создаем коллекцию строк:
Код:
Public Sub Collect() ' Процедура создания коллекции 
Dim Stroke As Variant ' Массив образованный методом Split
    Set mRows = New Collection ' Создаем новую коллекцию строк
        For i = 1 To Всего_строк ' Цикл перебора строк текстового файла
            Stroke = Split([Строка(i)], [Разделитель]) ' Создаем массив Stroke для i-ой строки коллекции mRows
            mRows.Add Stroke, "Row_" & i ' Добавляем Stroke в коллекцию mRows с оригинальным ключом Row_i
        Next i
End Sub
Далее создаем процедуру удаления строки
Код:
Public Sub Delete_Row(i as Long) ' Процедура удаления строки, где i номер удаляемой строки 
    If mRows.Count = 0 Then Exit Sub
        mRows.Remove "Row_" & i
End Sub
Пименов Александр вне форума Ответить с цитированием
Старый 01.04.2012, 13:40   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Спасибо, попробую. похоже, это именно то, что нужно.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна прога. Язык по усмотрению автора. Загрузка текстового файла, поиск и замена одних символов на другие. Taygleb Помощь студентам 2 17.01.2012 11:41
Загрузка текстового файла из ресурсов SolovejK Общие вопросы Delphi 1 22.05.2010 20:18
Из текстового файла в бд!!! Poltev86 БД в Delphi 5 16.05.2010 23:18
Загрузка данных из текстового файла diliana Помощь студентам 14 03.03.2010 09:05
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10