|
Вопрос # 2 065/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Подскажите, пожалуйста. Как из текстового файла занести в базу данных(Access) в одно поле словосочетание(пример в файле Поле Напрвление необходимо считать "Сотовая связь Neo").
Проблема в том что при нахождение параметра берется только первое("Сотовая") слово до пробела, а остальные слова как бы присваиваются другим параметрам(Сумма и № уд), что приводит к ошибке.
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим-
- function param(var s:string):string;
- var
- p:string;
- i:integer;
- begin
- p:= '';
- for i:=1 to length(s) do
- begin
- if s[i] in [' ',#8] then
- begin if (length(p)>0) then break;
- end
- else p:= p + s[i];
- end;
- s:= midstr(s,i+1,length(s)-i);
- param:= p;
- end;
-
- function test_napr(s:string):boolean;
- var
- i:integer;
- begin
- for i:= 1 to length(s) do
-
- then
- begin
- test_napr:= false;
- exit;
- end;
- test_napr:= true;
- end;
 |
Вопрос задала: 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 (статус: Посетитель), 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
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|