Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 065

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Подскажите, пожалуйста. Как из текстового файла занести в базу данных(Access) в одно поле словосочетание(пример в файле Поле Напрвление необходимо считать "Сотовая связь Neo").
Проблема в том что при нахождение параметра берется только первое("Сотовая") слово до пробела, а остальные слова как бы присваиваются другим параметрам(Сумма и № уд), что приводит к ошибке.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1.  
  2. function param(var s:string):string;
  3. var
  4. p:string;
  5. i:integer;
  6. begin
  7. p:= '';
  8. for i:=1 to length(s) do
  9. begin
  10. if s[i] in [' ',#8] then
  11. begin if (length(p)>0) then break;
  12. end
  13. else p:= p + s[i];
  14. end;
  15. s:= midstr(s,i+1,length(s)-i);
  16. param:= p;
  17. end;
  18.  
  19. function test_napr(s:string):boolean;
  20. var
  21. i:integer;
  22. begin
  23. for i:= 1 to length(s) do
  24.  
  25. then
  26. begin
  27. test_napr:= false;
  28. exit;
  29. end;
  30. test_napr:= true;
  31. end;


Taniya Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Taniya (статус: Посетитель)
Вопрос отправлен: 8 ноября 2008, 21:03
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Taniya!
Если файл является именно таким, как Вы написали, то код разделения будте где то таким.
пусть s - входная строка.

var i:integer;
begin
....
s := trim(s);
delete(s,1,1);//удалим звездочку
s := trim(s);//Удалим пробелы по концам.
//Вытягиваем телефон
i := pos(' ', s);
d1 := copy(s, 1, i - 1);
delete(s,1, i);
//вытягиваем дату
i := pos(' ', s);
d2 := copy(s, 1, i - 1);
delete(s,1, i + 1);
//а теперь начинаем орудовать в обратном направлении
//№ уд
i := LastDelimeter(' ',s);
d5 := copy(s, i + 1, maxint);
delete(s, i, maxint);//может быть тут надо будет написать i -1, если будет плохо работать.
//Сумма
i := LastDelimeter(' ',s);
d4 := copy(s, i + 1, maxint);
delete(s, i, maxint);//может быть тут надо будет написать i -1, если будет плохо работать.
//то что осталось - это название направления
d3 := trim(s);
после выполнения кода Ваш результат в d1-d5.
О том как перевести дату - читайте в одном с соседних вопросов.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 10 ноября 2008, 10:01


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 10 ноября 2008, 04:42; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 9 ноября 2008, 16:55 [#1]:

Ну так, такой у Вас алгоритм. Может лучше приведёте исходные данные, а мы уже как то составим функцию для чтения?
Галочка "подтверждения прочтения" - вселенское зло.
Taniya

Taniya (статус: Посетитель), 10 ноября 2008, 04:42 [#2]:

Исходные данные: Данн текстовый файл необходимо занести в базу данные(Телефон|Дата|Направление|Сумма|№ уд) из файла путем импорта.
Тел.| Дата |Направление |Сумма | № уд
-----------------------------------------------------------------------------
* 458988 05.07.2006 РОССИЯ МОБ.СВЯЗЬ 100 2312354
* 458988 11.07.2006 Платная справка 150 6548522
* 458988 13.07.2006 СОТОВАЯ СВЯЗЬ Neo 250 5896523
* 458988 14.07.2006 РОССИЯ МОБ.СВЯЗЬ 120 2454213
* 458988 18.07.2006 Петропавловск 350 65452212
* 458988 20.07.2006 СОТОВАЯ СВЯЗЬ Neo 100 54875455
* 458988 21.07.2006 СОТОВАЯ СВЯЗЬ Neo 200 8754542
* 458988 31.07.2006 Платная справка 15 54545454
* 458988 31.07.2006 РОССИЯ МОБ.СВЯЗЬ 10 45454
* 789654 03.07.2006 СОТОВАЯ СВЯЗЬ Neo 150 584454

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.02 сек.