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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2014, 08:32   #1
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию Точное считывание с текстового файла

здравствуйте может тут кто знает http://www.cyberforum.ru/vba/thread1161815.html
Спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 06.05.2014, 08:58   #2
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Доброе время суток.
Скорее всего проблему через ADO не решить. Если даже закавычить текст или задать свой TextDelimiter=' ограничитель текста, то в этом случае сохраняются только пробелы слева, справа в любом случае обрезаются.
Так что либо использовать Split, либо перед работой заменить, если возможно, ;, на, например, -;. А после получения значения, отбрасывать последний символ.
AndVGri вне форума Ответить с цитированием
Старый 06.05.2014, 20:04   #3
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

перед работой заменить, если возможно - да возможно, как скажете
если возможно, ;, на, например, -;. - чуток не понятно
вместо ниже написанного
1 ;Chairs ;$40.00 ;
как писать?
1 -;Chairs -;$40.00 -;
попробовал, получил
[]
[Chairs -]
[$40.00 -]
хрен редьки не слаще
Ципихович Эндрю вне форума Ответить с цитированием
Старый 07.05.2014, 04:27   #4
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Эндрю
Оба варианта в примере, на мой взгляд, без учёта последующего использования, со Split проще. Я же подразумевал, что для чтения текста со значения поля текущей записи будет использоваться
Left$(rs("ID").Value, Len(rs("ID").Value) - 1)
Вложения
Тип файла: zip Test.zip (13.3 Кб, 7 просмотров)
AndVGri вне форума Ответить с цитированием
Старый 07.05.2014, 05:21   #5
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

спасибо!, получилось, а теперь я скажу зачем это затевалось, конечная цель
в текстовом файле, откуда считываем - 100 000 срок
надо одним махом, то есть за пару секунд узнать есть ли в этом файле где нибудь в данных пробел и вывести эти данные
для этой экономии времени я и затевал ADO_и_SQL
это возможно? как?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 07.05.2014, 08:43   #6
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Цитата:
есть ли в этом файле где нибудь в данных пробел и вывести эти данные
Тогда положим, что текстовый файл состоит из одного поля, тогда запросом выбираем записи, которые в нём содержат пробел.
Вложения
Тип файла: zip test2.zip (12.6 Кб, 8 просмотров)
AndVGri вне форума Ответить с цитированием
Старый 07.05.2014, 09:46   #7
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

спасибо, чуть изменил
Код:
On Error Resume Next
    Debug.Print "[" & Join(Split(rs(0).Value, ";"), "][") & "]"
    MsgBox$ Err.Number & " " & Err.Description
    If Err.Number = 3021 Then Beep
    rs.Close: cn.Close
End Sub
стало веселей, сорри, чуть занят, ещё не всё опробовал что надо
если что спрошу
Ципихович Эндрю вне форума Ответить с цитированием
Старый 08.05.2014, 06:18   #8
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
On Error Resume Next
Думаю, не стоит. Ошибка ведь скорее всего связана, что нет записей с пробелами. Это можно проверить через rs.RecordCount, если 0, то нет таких записей.
AndVGri вне форума Ответить с цитированием
Старый 08.05.2014, 19:02   #9
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

я правильно понял
'% %', что это речь идёт о пробеле, в коде экранирование идёт, да?
а это два пробела '% %'", а как будет два пробела и более?
если текст в текстовом файле, такой
взмигиваем, взмигивают, 2, ют
то есть 4 слова
....1....................2........3 ...4
можно узнать ошибки такие:
если в слове 1 изменить количество букв слова 3 заменить на слово 4 будет ли оно равно слову 2??
где Вы об этом черпаете инфу, дайте пжл ссылку, но только если русский ресурс
Ципихович Эндрю вне форума Ответить с цитированием
Старый 09.05.2014, 15:03   #10
AndVGri
Форумчанин
 
Регистрация: 10.02.2012
Сообщений: 109
По умолчанию

Ципихович Эндрю, с праздиком!
Задача же шла о
Цитата:
узнать есть ли в этом файле где нибудь в данных пробел и вывести эти данные
По этому в schema.ini был установлен фиктивный разделитель полей таблицы |, то есть данные считывались как строка.
В ней фильтром Like отбирались строки, содержащие пробел (обычный Like, разница лишь в том, что для текстовых файлов драйвер баз данных Access вместо * - как любой последовательности символов использует %).
Можно сделать более жёсткий вариант фильтра, чтобы, например это текст, не попадали в фильтр (не выбирались бы сроки, содержащие пробел между словами), то есть искать пробелы только перед ; или только после ;.
Код:
rs.Open "Select F1 From [text1.txt] Where (F1 Like '% ;%') Or (F1 Like '%; %')", cn, adOpenStatic, adLockReadOnly
Цитата:
а как будет два пробела и более?
В этом случае ADO SQL для текстовых файлов на драйвере Access вам не помогут, насколько знаком, регулярные выражения поддерживаются в более серьёзных базах данных, например Oracle. Тогда только построчное чтение и регулярные выражения. Pattern будет что-то
Код:
RegExp.Global = True 'поиск всех вхождений
RegExp.Pattern = "; +| +;"
Тогда по коллекции вхождений по Length - 1 можно подсчитать число пробелов в перед/после каждого ;
Цитата:
если в слове 1 изменить количество букв слова 3 заменить на слово 4 будет ли оно равно слову 2??
Честно говоря, не понял эту фразу.
AndVGri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание с текстового файла в с++! vlad_Gutov Общие вопросы C/C++ 6 27.10.2012 13:03
Считывание текстового файла Waqq Общие вопросы Delphi 4 24.01.2011 20:43
Считывание из текстового файла PlumBoom Общие вопросы C/C++ 8 21.03.2010 20:41
Считывание с текстового файла Morphling Фриланс 12 07.02.2010 17:37
считывание с текстового файла ciaonataha Помощь студентам 0 20.04.2009 12:09