Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse? / 16 сообщений из 16, страница 1 из 1
19.09.2006, 08:39
    #33995649
asd456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
Privet.
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
Ne v otdelnix poley, a vo vsex tablitse.
Yest li kakaya to komanda dlya etoqo?
...
Рейтинг: 0 / 0
19.09.2006, 09:38
    #33995761
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
Код: plaintext
1.
2.
use mydbf
lcCifra = '1'
? occur(lcCifra, substr(filetostr('mydbf.dbf'), header('mydbf') +  1 ))

Не сработает если есть поля типа int
Если файл большой, то могут быть проблемы с его размещением в памяти.

Любопытно: зачем это надо?
...
Рейтинг: 0 / 0
19.09.2006, 09:48
    #33995791
asd456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
Net polya tipa int.
Fayl ochen bolshoy,primerno 5000000 (mln) zapisey budet. Neznayu daje kak budet rabotat.
Eto dlya lotereynoqo iqra.
...
Рейтинг: 0 / 0
19.09.2006, 09:54
    #33995802
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
asd456Net polya tipa int.
Fayl ochen bolshoy,primerno 5000000 (mln) zapisey budet. Neznayu daje kak budet rabotat.
Eto dlya lotereynoqo iqra.
Вместо filetostr() можно использовать чтение файла блоками fread(...)
Размер блока должен быть пропорционален сектору диска (например 65536), тогда чтение будет быстрым.
...
Рейтинг: 0 / 0
19.09.2006, 09:56
    #33995810
asd456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
A kak eto komanda rabotaet: fread(..) ya ne ispolzuval etu komandu.
...
Рейтинг: 0 / 0
19.09.2006, 10:08
    #33995830
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
Это из набора функций для работы с файлами. Почитай help на fopen(), fread(), fclose(), feof()

Из хелпа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
FREAD( ) Function Example

The following example uses FREAD( ) to display the contents of a file. If the file is empty, a message is displayed.

* TEST.TXT must exist -- you can create this file
* using Notepad.

Local gnFileHandle,nSize,cString
gnFileHandle = FOPEN("test.txt")
* Seek to end of file to determine the number of bytes in the file
nSize =  FSEEK(gnFileHandle,  0 ,  2 )     && Move pointer to EOF
IF nSize <=  0 
 * If the file is empty, display an error message
 WAIT WINDOW "This file is empty!" NOWAIT
ELSE
 * If file is not empty, the program stores its contents
 * in memory, then displays the text on the main Visual FoxPro window
 = FSEEK(ggnFileHandle,  0 ,  0 )      && Move pointer to BOF
 cString = FREAD(gnFileHandle, nSize)
 ? cString
ENDIF
= FCLOSE(gnFileHandle)         && Close the file


Извини, но весь код писать некогда.
В твоем случае надо читать блоками до конца файла, проверять каждый блок на нужную цифру, и суммировать.
А ты первый вариант попробовал? Может заработает?
...
Рейтинг: 0 / 0
19.09.2006, 10:20
    #33995852
asd456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
1-y variant seychas budu proverit . Spasibo.
...
Рейтинг: 0 / 0
19.09.2006, 10:27
    #33995875
asd456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
1-y variant takoy oshibku dayut:
"File access is denied"
No u menya etot fayl bolshe ni qde ne ispolzuyutsa.
...
Рейтинг: 0 / 0
19.09.2006, 12:11
    #33996323
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
asd4561-y variant takoy oshibku dayut:
"File access is denied"
No u menya etot fayl bolshe ni qde ne ispolzuyutsa.

Может у тебя таблицы монопольно по умолчанию открываюся?
попробуй use mydbf shared
...
Рейтинг: 0 / 0
19.09.2006, 12:43
    #33996455
asd456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
Da, vse pravilno , rabotaet. Spasibo.
Mojno li s pomoshi etoy komandu nayti eti tsifri i zamenit chem to druqoy, napirmer obnulyat?
...
Рейтинг: 0 / 0
19.09.2006, 12:52
    #33996486
asd456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
I prictem rabotaet bistro. Seycas u menya v tablitse poltara milyona zapisey , no rabotaet ochen bistro, ya dumayu i s 5 milyonami ne budet problema.
...
Рейтинг: 0 / 0
19.09.2006, 13:25
    #33996622
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
asd456Da, vse pravilno , rabotaet. Spasibo.
Mojno li s pomoshi etoy komandu nayti eti tsifri i zamenit chem to druqoy, napirmer obnulyat?
Теоретически да, памяти только будет использовани в несколько раз больше
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
use mydbf
lcCifra = '1'
lcF = filetostr('mydbf.dbf')
lcHeader = left(lcF, header('mydbf'))
lcBody = substr(lcF, header('mydbf') +  1 )
? occur(lcCifra, lcBody)
lcBody = chrtran(lcBody, lcCifra, '0') && замена на '0'
StrToFile(lcHeader, 'mydbf2.dbf')
StrToFile(lcBody, 'mydbf2.dbf', .t.)
Данный код имеет место быть, но возможно нарушение структуры DBF, например если как-то пометка удаления установится.
...
Рейтинг: 0 / 0
19.09.2006, 13:48
    #33996708
asd456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
Zdes mydbf2.dbf - novaya tablitsa, kotoriy posle obnulenie?
...
Рейтинг: 0 / 0
19.09.2006, 14:08
    #33996799
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
asd456Zdes mydbf2.dbf - novaya tablitsa, kotoriy posle obnulenie?
да
...
Рейтинг: 0 / 0
19.09.2006, 14:10
    #33996805
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
Не надо ерундой заниматься.

FoxPro - это СУБД. Т.е. изначально рассчитана на работу с таблицами, как файлами высого уровня. Работа с текстовыми файлами (низкий уровень) будет заведомо медленнее.

Это значит, что просканировать все поля всех записей и сделать нужные замены будет быстрее и проще, чем вскрывать DBF и что-то там искать. Точнее, средствами FoxPro быстрее и проще.

Вы лучше внятно сформулируйте задачу. Что именно надо сделать. Ведь "заменить цифру 1 на цифру 0" - это слишком расплывчато.

Где именно заменить? Если записана дата 1995 год надо в ней заменять цифру 1 на 0? Если записано число 10 тоже заменить 1 на 0?

А о какой версии файла DBF идет речь? Вы вообще в курсе, что есть служебные поля в которых менять ничего не надо. Например, признак удаленной записи, признак NULL, признак VarChar.

А мемо-поля у таблицы есть? А в них надо что-то заменять? А индексы?

Т.е. вопросов "вагон и маленькая тележка". Причем это далеко не все вопросы, которые неизбежно возникнут, если Вы пойдете по пути низкоуровневой модификации таблиц. Заменить только то, что нужно и при этом не испортить структуру таблицы - очень не тривиальная задача. Может все-таки делать все "стандартным" способом?
...
Рейтинг: 0 / 0
19.09.2006, 14:17
    #33996832
asd456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse?
Spasibo, Dima. Eto pomoemu to chto nado mne. Vi ochen pomaqli mne.
I yeshyo posledniy vopros.
Mne nado napolnit tablitsu, no u menya ochen dolqo poluchaetsa.
Nado vot takoy tablitsu napolnit (a.dbf)
To yest v 1-y pole (polya a1) doljno naxoditsa ot 1 do 9,
2-m pole (polya A2) ot 10 do 19
3-m pole (polya A3) ot 20 do 29
4-m pole (polya A4) ot 30 do 39
5-m pole (polya A5) ot 40 do 50
Sostavlenie etoy tablitsu u menya ochen mnoqo vremeni zanimaet.
Kak mojno bistro napolnit takoy tablitsu?
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Kak mojno bistro nayti kakaya to tsifr skolko raz prisutstvuet v tablitse? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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