powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему не записывается строка в файл...
11 сообщений из 11, страница 1 из 1
Почему не записывается строка в файл...
    #38687689
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код записи строки в текстовый файл, но почему-то он не записывает...:-(

im_f="xxx.txt"
ifp = FOPEN(im_f)
DO WHILE !FEOF(ifp)
per = FGETS(ifp)
IF AT('+++++++',per)<>0
per3=STRTRAN(per,'+++++++','-------')
=fwrite(ifp,per3)
endif
ENDDO
= FCLOSE(ifp)
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38687756
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ifp проверять надо
Код: sql
1.
2.
3.
4.
ifp = FOPEN(im_f)
if ifp < 0
   ? 'Не открылся файл ' + im_f
endif
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38687778
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видоизменим код и внутрь условия введём messagebox(per), условие срабатывает и показывается messagebox, т.е. файл открывается и читается нормально (атрибуты файла, тоже в порядке, напрямую вхожу и могу изменить, т.е. на запись файл тоже открыт) но вот запись из фокса не происходит(файл кроме этой задачи больше нигде не открыт)
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38687834
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читай про второй параметр FOPEN(), по дефолту 0 - открыть на чтение. helpFOPEN(cFileName [, nAttribute])

Parameters
cFileName
...
nAttribute
Specifies read/write privileges or a buffering scheme for the file you open. The following table lists each number you can include in nAttribute, and the read/write file privileges and buffering scheme it establishes.

nAttribute Read/Write privileges Buffered/unbuffered
0 (Default) Read-only Buffered

1 Write-only Buffered

2 Read and Write Buffered

10 Read-only Unbuffered

11 Write-only Unbuffered

12 Read and Write Unbuffered


тебе надо
Код: sql
1.
ifp = FOPEN(im_f, 2)



и работать все-равно будет неправильно, т.к. прочитав строку, указатель перейдет на начало следующей и писать ты будешь поверх следующей.

Если файл небольшой (до 1-2 Мб) лучше так
Код: sql
1.
2.
3.
lcF = FileToStr(im_f)
lcF = STRTRAN(lcF,'+++++++','-------')
StrToFile(lcF, im_f)
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38687835
Трезвый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У функции FOPEN() есть второй параметр, необязательный, определяет, открывается ли файл только для чтения или для чтения/записи, буферизованно или нет.

По умлочанию этот параметр =0, Read-only, используйте, например, 2 Read and Write

Код: sql
1.
ifp = FOPEN(im_f, 2)




...И будет вам счастье.
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38689038
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
файл большой, наверное можно как-нибудь запомнить и вернуть назад указатель..
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 im_f="xxx.txt"
 ifp = FOPEN(im_f)
 DO WHILE !FEOF(ifp)
    pf   =FSEEK(ifp,0,1)
    per = FGETS(ifp)
    IF AT('+++++++',per)<>0
        per3=STRTRAN(per,'+++++++','-------')
       *Врт тут не  получается вернуть указатель назад...:-(
       =fseek(ifp,1,-pf)
       =fwrite(ifp,per3)
    endif
 ENDDO
 = FCLOSE(ifp)
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38689042
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Ты открываешь файл только на чтение, надо чтение запись
Код: sql
1.
 ifp = FOPEN(im_f, 2)


2. fseek() возвращает смещение относительно начала файла, поэтому перед записью так
Код: sql
1.
=fseek(ifp, pf, 0)



PS Еще учти что такая конструкция будет работать только если одинаковая длина у исходной и вставляемой строки.
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38689045
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрт, да забываю я тут 2 ставить(FOPEN(im_f, 2) ), в исходниках стоят, а когда сюда переношу, то пропускаю эту 2
т.е. если длина одинаковая строки начальной и конечной ... очень печально....
А как же выйти из этой ситуации... Мало того, что файл большой, так в нём длина строки может встречаться за 255 символов...
и это не одно выражение которое надо сменить..., и если применять FileToStr+strtran, то она каждый раз при новом условии(+ на -, * на ^ и т.д.), будет начинать поиск с начала файла...
Блин...что же придумать...
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38689046
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вот что подумал... правда не знаю как реализовать, читается с одного файла строка, изменяется и пишется в другой...
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38689050
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строки более 255 символов:
Код: sql
1.
per = FGETS(ifp, 8192)


q1w1e1Да, вот что подумал... правда не знаю как реализовать, читается с одного файла строка, изменяется и пишется в другой...
Обычно именно так и делают.
Создается временный файл в той же папке где исходный, исходный файл читается, пишется во временный, по окончанию закрываешь оба файла, удаляешь исходный, временный переименовываешь в исходный.
...
Рейтинг: 0 / 0
Почему не записывается строка в файл...
    #38689170
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему не записывается строка в файл...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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