Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / GetWordNum() и 2 табуляции подряд / 14 сообщений из 14, страница 1 из 1
09.02.2006, 12:15
    #33533680
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
Есть текстовый файл:
Код: plaintext
1.
2.
3.
4.
5.
6.
27 . 01 . 2006   21 : 26 : 5679224061576 →S→ 600 . 0027 . 01 . 2006   21 : 30 : 5379224061576 →S→ 501 . 7027 . 01 . 2006   21 : 31 : 05 →→S→ 600 . 0028 . 01 . 2006   19 : 20 : 4379136643293 →→ 1434 . 80 

→ - табуляция
я его читаю построчно и путем GetWordNum(...) записываю в таблицу.
Проблема в том, что 2 табуляции подряд не распознаются как 2 поля.
Как с этим справится?
VFP 9
...
Рейтинг: 0 / 0
09.02.2006, 12:29
    #33533768
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
2 w3d
Незнаю поможет ли моя идея. Перед GetWordNum делать проверку на две табуляции если есть лишняя тол замещать ее на ''.
...
Рейтинг: 0 / 0
09.02.2006, 12:31
    #33533781
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
Мне как раз не надо ее ни на что заменять!
Мне надо чтоб 2 табуляции распознавались как 2 поля; сейчас же getwordnum() сливает 2 табуляции подряд в одно.
...
Рейтинг: 0 / 0
09.02.2006, 12:32
    #33533790
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
Соответственно, таблица заполняется неправильно.

Возможно, есть другой вариант по заполнению таблицы из текстового файла?
В файле кроме собственно данных еще куча информации, напрямую взять не получится.
...
Рейтинг: 0 / 0
09.02.2006, 12:42
    #33533831
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
2 w3d
посмотри здесь http://www.sql.ru/forum/actualthread.aspx?tid=99178&hl=getwordcount
...
Рейтинг: 0 / 0
09.02.2006, 12:49
    #33533868
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
tt = chr( 9 )+'27.01.2006 21:26:56'+chr( 9 )+'79224061576'+chr( 9 )+'S'+chr( 9 )+'6'+chr( 9 )+'0'+chr( 9 )+'0.00'
? alines(aa,tt,chr( 9 ))
? aa( 1 )
? aa( 2 )
? aa( 3 )
? aa( 4 )
? aa( 5 )
? aa( 6 )
? aa( 7 )
...
Рейтинг: 0 / 0
09.02.2006, 13:11
    #33533959
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
А по простому?

Код: plaintext
1.
2.
select MyTab
APPEND FROM MyFile.txt TYPE DELIMITED WITH TAB
...
Рейтинг: 0 / 0
09.02.2006, 13:54
    #33534190
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
2 alex11100
Спасибо, то что надо!

2 ВладимирМ
Нет, там в файле еще куча текста лежит.

Еще вопрос:
Открываю файл fopen, fclose стоит в конце программы; если происходит сбой, то файл остается открытым. Как его можно закрыть?
...
Рейтинг: 0 / 0
09.02.2006, 14:05
    #33534236
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
.........
local lnFile
lnFile =  0  
readfromfile(@lnFile)
if lnFile> 0 
  =fclo(lnFile)
endif
........
........

proc readfromfile
lpara tnFile
tnfile = fope("cvvv")
........
...
Рейтинг: 0 / 0
09.02.2006, 14:07
    #33534243
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
w3d2 alex11100
Спасибо, то что надо!

2 ВладимирМ
Нет, там в файле еще куча текста лежит.

Еще вопрос:
Открываю файл fopen, fclose стоит в конце программы; если происходит сбой, то файл остается открытым. Как его можно закрыть?
Смотря что за сбой...
Если "вываливается" вся программа (+закрывается Фокс), то можно дополнительно не закрывать - само закроется при освобождении ресурсов системой.
Если же "вываливается" с сообщением об ошибке, то надо организовать обработчик ошибок и уже в нем делать закрытие ( fclose() ) твоего файла...
...
Рейтинг: 0 / 0
09.02.2006, 14:36
    #33534388
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
Ошибка: fopen(gcFile,10) возвращает -1
После закрытия фокса все работает нормально.
Как я понял, файл просто остается открытым; так вот как его можно закрыть при следующем запуске программы?
...
Рейтинг: 0 / 0
09.02.2006, 14:43
    #33534412
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
Итак, представляю: парсер корпоративных отчетов по переговорам "Мегафон".
Код: plaintext
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.
*******************************
* обработка файлов от Мегафон *
*******************************
* создаем курсоры
CREATE CURSOR razgovor (tel N( 10 , 0 ), data C( 20 ), nomer C( 20 ), kod c( 5 ), tip I, dlit N( 10 , 3 ), vsego N( 10 , 3 ))
CREATE CURSOR rouming (tel N( 10 , 0 ), data C( 20 ), nomer C( 20 ), kod c( 5 ), tip I, dlit N( 10 , 3 ), vsego N( 10 , 3 ), oper c( 30 ))
* открываем файл
gcFile=GETFILE('txt','Открыть файл мегафона','Открыть', 0 ,'Импорт отчета "Мегафон"')
ff=fopen(gcFile, 10 )
IF ff> 0  THEN 
	ppp= 0 
	roum= 0 
DO WHILE !feof(ff)
	* считываем построчно
	iii=fgets(ff) 
	kkk=alines(aa,iii,chr( 9 ))
	IF kkk >  2  THEN 
		nnn=aa( 2 )
		ttt=aa( 3 )
	ELSE 
		nnn=""
		ttt=""
	ENDIF 
	* поставим флаг, если началась ведомость
	IF alltrim(nnn)=='Ведомость разговоров. Телефон' THEN 
		ppp= 1 
		telefon=VAL(RIGHT(ttt,LEN(ttt)- 3 ))
	ENDIF 
	* роуминг
	IF alltrim(nnn)=='Ведомость разговоров при роуминге. Телефон' THEN 
		roum= 1 
		telefon=VAL(RIGHT(ttt,LEN(ttt)- 3 ))
	ENDIF 
	* сбросим флаг, если закончилась ведомость
	IF alltrim(nnn)=='Итого' THEN 
		IF ppp= 1  then
			ppp= 0 
		ENDIF
		IF roum= 1  then
			roum= 0 
		ENDIF 
	ENDIF 
	* добавляем запись в таблицу разговоров
	IF kkk= 7  AND ppp= 1  THEN 
		SELECT razgovor
		APPEND BLANK
		replace tel WITH telefon
		replace data with aa( 2 )
		replace nomer WITH aa( 3 )
		replace kod WITH aa( 4 )
		replace tip WITH VAL(aa( 5 ))
		replace dlit WITH VAL(aa( 6 ))
		replace vsego WITH VAL(aa( 7 ))
	ENDIF 
	* добавляем запись в таблицу роуминга
	IF kkk= 8  AND roum= 1  AND alltrim(aa( 2 ))!="Дата" THEN 
		SELECT rouming
		APPEND BLANK
		replace tel WITH telefon
		replace data with aa( 2 )
		replace nomer WITH aa( 3 )
		replace kod WITH aa( 4 )
		replace tip WITH VAL(aa( 5 ))
		replace dlit WITH VAL(aa( 6 ))
		replace vsego WITH VAL(aa( 7 ))
		replace oper WITH aa( 8 )
	ENDIF 
ENDDO 
	fclose(ff)
	messagebox("Готово!")
ELSE 
messagebox("Ошибка открытия файла!")
ENDIF 

Сделано за несколько часов, но тем не менее работает.
Расшифровка переговоров должна быть в формате *.txt
Если кому надо - берите, будут идеи по усовершенствованию - охотно приму.
...
Рейтинг: 0 / 0
09.02.2006, 15:16
    #33534544
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
ой, чей-то не финтикультяписто

бросьте сюда файлик с левыми данными
(примерную структуру)
...
Рейтинг: 0 / 0
10.02.2006, 06:00
    #33535830
w3d
w3d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GetWordNum() и 2 табуляции подряд
Вот пример.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / GetWordNum() и 2 табуляции подряд / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]