|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Суть задачи следующая: Есть текстовый файл mo_imp.txt для импорта в программу, но его нужно поменять следющим образом: Есть Код: plaintext 1. 2.
Надо Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 10:36 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
ух черт а текстовый редактор не поможет ? ну если не помежет то функции fread fwrite fopen fseek например есть другие способы ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 10:42 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
leafух черт а текстовый редактор не поможет ? Это только часть огромного текстового файла, тем более каждый день он меняется... Можно хоть какой примерчик чтения и копирования фрагментов текстового файлика? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 11:11 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
ну если вы пришлете примерчик чего вам надо то будет примерчик как делать gg= fopen('d:\mydbf.dbf',2) if gg>0 fseek(gg,29) fwrite(gg.chr(0)) fclose(gg) set cpdialog on use d:\mydbf.dbf in 0 exclusive endif если ничего не напутал ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 11:18 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
gg= fopen('d:\mydbf.dbf',2) if gg>0 fseek(gg,29) fwrite(gg,chr(0)) fclose(gg) set cpdialog on use d:\mydbf.dbf in 0 exclusive endif ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 11:19 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Программка сама не обращается и не имеет никакой БД, суть ее только одна это переделать текстовый файл из 1 варианта во 2 вариант, и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 11:24 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
да конечно дбф файл это таблица и никакого отношения к текстовому файлу не имеет ? Правильно я говорю? А с текстовым файлом низя работать как с таблицей ? Если я прав тогда извените за розыгрыш с приведенным примером он абсолютно бесполезен. А еще есть такая штука как командное окно фокспро. Это так к слову ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 11:28 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Akel leafух черт а текстовый редактор не поможет ? Это только часть огромного текстового файла, тем более каждый день он меняется... Можно хоть какой примерчик чтения и копирования фрагментов текстового файлика? А что тут сложного? Если ты хоть один раз работал с файлами на низком уровне (например, в бейсике, С, паскале...), то ничего нового нет - принципы те же самые: - при помощи fopen (кстати, похожая функция есть в С) открывается файл; числовое значение, возвращаемое этой функцией, является идентификатором (Хендлом, handle ) открытого файла; если вернулось -1, то произошла ошибка при открытии. - при помощи fread читаются ПОСЛЕДОВАТЕЛЬНО байты из файла (Столько, сколько нужно ) и помещаются в текстовую переменную. - текстовая переменная дробится на фрагменты в соответствии с проставленными разделителями и фрагменты преобразуются к необходимому формату (число, дата, время и т.д.) - производятся нужные преобразования - фрагменты собираются в нужном порядке и при помощи fwrite записываются в файл (можно в тот же самый), а можно сразу закинуть данные в dbf-ки... - когда достигнут конец исходного файла обработка останавливается, открытые на низком уровне файлы закрываются при помощи fclose(<Хэндл>) Вот и все! А ты боялась... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 11:31 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
AkelПрограммка сама не обращается и не имеет никакой БД, суть ее только одна это переделать текстовый файл из 1 варианта во 2 вариант, и все. Я открою тебе страшную тайну: любой файл (dbf, dll, exe и т.д.) можно обработать как текстовый Неужели ты ни разу не нажимал в Нортон Командере (Тотал/Виндовс Командере или Фаре) F3/F4 не на текстовом файле? Ни за что не поверю... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 11:38 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
нажимал=))) просто уже мозги кипят... сразу по несколько дел делаешь, толком не могу со средоточится=))) Буду пробовать, спасибки ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 11:54 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Что то одного пока не пойму, как мне сделать, чтоб FOX после четвертого # начал копирование содержимого в переменую до пятого # . После чего с пятого # по шестой # вставил взамен тех данных что там есть. И перешел на следующую строчку и повторил аналогичное, и так все до конца файла. P.S. Вы уж простите, но я что то на самом деле не пойму... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 13:12 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
AkelЧто то одного пока не пойму, как мне сделать, чтоб FOX после четвертого # начал копирование содержимого в переменую до пятого # . После чего с пятого # по шестой # вставил взамен тех данных что там есть. И перешел на следующую строчку и повторил аналогичное, и так все до конца файла. P.S. Вы уж простите, но я что то на самом деле не пойму... Примерно так: 1 - определить текущую позицию в файле pp=fseek(handle,0,1) 2: - считать строку из файла в переменную:аа=fgets(<Параметры>) 3 - определить позицию пятого # (pos) 4 - определить позицию шестого # (pos1) 5 - сс=substr(aa,1,pos) 6 - bb=substr(aa,pos+1,pos1-1) 7 - dd=substr(aa,pos1) 8 - преобразуем bb к числовому виду, проведем преобразования, затем вернем числовое значение к текстовому виду и сохраним его в bb 9 - aa=cc+bb+dd 10 - fseek(handle,pp,0) * Это если писать в тот же файл; если писать в другой, то просто пишем в * конец файла, а п.10 пропускаем... 11 - fputs(handle,aa) или fwrite(....) 12 - go to label 2: ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 13:37 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Есть такие полезные функции - FGETS() и FPUTS(), описание найдешь в хелпе твоей версии, из этого же семейства. Они чишут/пишут не кол-во байт, а построчно, то есть до CR+LF. Юзаешь их вместо FREAD/FWRITE. Получил строку - преобразовал - отписал в другой файл, сделанный тобой предварительно по FCREATE(). Чтобы преобразовать, сначала позицию в строке найти надо. У тебя есть кАнкретный разделитель '#', вот его и ищи с помощью AT() AT(cSearchExpression, cExpressionSearched [, nOccurrence]) - вот этот самый nOccurrence рулит, нужен пятый разделитель - задай сразу 5. Еще подробнее разжевать? Не забудь FCLOSE() для обоих файлов, чтения и записи. Если результирующий файл должен сохранить прежнее имя, то (1) переименуй исходный, (2) переименуй полученный. А вообще-то такие вещи, как замена "неправильных" данных на правильные, решается одним-двумя Update-SQL уже после того, как ты эти файлы зальёшь в базу. И стоит ли городить огород из FOPEN/FCREATE/FGETS/FPUTS/FCLOSE/RENAME?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 13:51 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Hi Akel По видимому это файл для обмена с РКЦ. Можно поступить так создать табличку с 2-мя текстовыми полями (если максимальная длина строки больше 254, то 4 поля) или использовать Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 13:53 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Чтобы преобразовать, сначала позицию в строке найти надо. У тебя есть кАнкретный разделитель '#', вот его и ищи с помощью AT() AT(cSearchExpression, cExpressionSearched [, nOccurrence]) - вот этот самый nOccurrence рулит, нужен пятый разделитель - задай сразу 5. Еще подробнее разжевать? А еще есть такая либа как foxtools, а в ней такие функции как Words и Wordnum (начиная с 7-ки или 8-ки они переместились в сам фокс под названиями GetWordCount и GetWordNum соответственно). И тогда получение нужного слова, напрмер 3-го, превращается в такую строчку: lcWord = GetWordNum(строка_считанная_из_файла, 3, '#') И дешево и сердито. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 14:03 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
I'm sorry ... Опечатка;) n4=AT('#', txt ,4) n5=AT('#', txt ,5) n6=AT('#', txt ,6) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 14:06 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Глянь вот это обсуждение Форум Foxclub ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 14:17 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
1.Попробуй использовать функцию FILETOSTR(). Сразу файл преобразуешь в переменную. 2. Если это программно сформированный файл, то у него наверняка на конце каждой строки сидят chr(13)+chr(10), определил их позицию (через массив) - знаешь длину каждой строки. 3. Затем проводишь выборку из всего файла очередную строку - в выбранной строке определяешь позиции #(пишешь в массив) , обрабатываешь и пишешь в новую переменную - будующий результат, и так далее - вообщим цикла в цикле, после окончания обработки STRTOFILE() из переменной в файл. Извини пишу быстро - конец раб.дня ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 14:45 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Всем огромное спасибо, сейчас буду во всем разбираться... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 15:27 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Вообщем примерно так у меня получилось, и соответсвено ничего не работает. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 16:46 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Уффффф....РАБОТАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ВСЕМ ОГРОМНОЕ СПАСИБО!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 16:55 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
STORE FOPEN('c:\text\1.txt') TO text1 STORE FCREATE('c:\text\2.txt') TO text2 if text1>0 and text2>0 DO WHILE !feof('text1') aa=fgets(text1) n5=AT('#',aa,5) n6=AT('#',aa,6) if n5>0 and n6>0 aa=left(aa,n5)+cc+substr(aa,n6) endif FPUTS(text2,aa) ENDDO else messagebox('Закрыто приходите после часу') endif FCLOSE(text2) FCLOSE(text1) Как получилось так получилось ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2005, 17:00 |
|
Чтение текстового файла
|
|||
---|---|---|---|
#18+
Как вариант CREATE CURSOR Contents (Content M) APPEND BLANK APPEND MEMO Contents.Content FROM MyFile.txt Содержимое мемо-поля, с точки зрения FoxPro, это обычная символьная строка. Правда, очень большая. Т.е. в ней можно выполнять поиск обычными командами строкового поиска AT(). Далее так же как и с Modify Program MODIFY MEMO Contents.Content RANGE <expN1>, <expN2> При желании, можно сбросить внесенные изменения обратно в файл командой COPY MEMO Contents.Content TO MyFile.txt ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2015, 17:28 |
|
|
start [/forum/topic.php?fid=41&fpage=21&tid=1582230]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 163ms |
0 / 0 |