Форум
Написать нам
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: as-master  
Форум MMB » Всё о программе Multimedia Builder » Сценарии в MMB » SaveFile (Сохранение текста с помощью диалогового окна)
SaveFile
DeemaДата: Суббота, 01 Декабря 2007, 19:17 | Сообщение # 1
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
Подскажите пожалуйста ответ на такой вопрос (поиском к сожалению не нашел).
Мне нужно сохранить текст в файл с помощью диалогового окна и команды SaveFile. Но вот я не могу понять из описания этой команды в помощи каким образом происходит запись из текстовой переменной в файл. В помощи есть только описание того, как задать фильтр файлов в диалоговом окне сохранения (txt, log и др.).
Но что нужно сделать, чтобы при нажатии в диалоговом окне кнопки "сохранить" произошла запись текста в файл?
Помогите, плиз!
 
basmeДата: Суббота, 01 Декабря 2007, 21:23 | Сообщение # 2
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Команда SaveFile выполняет только формирование пути к файлу по заданной маске, и при нажатии кнопки "Сохранить" в переменную CBK_OpenFile выдаёт путь к указанному файлу. А непосредственное сохранение строки в файл производит команда StrToFile, в параметре которой уже указывается путь к файлу. То есть, сначала команда SaveFile, потом присвоение значения константы CBK_OpenFile какой-нибудь строке типо file$, и потом команда StrToFile с параметром file$.
 
DeemaДата: Воскресенье, 02 Декабря 2007, 16:31 | Сообщение # 3
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
Спасибо большое за подробный ответ.
Если можно еще немного пояснений: сохранение переменной в файл должно произойти как раз при нажатии пользователем кнопки "сохранить" в диалоговом окне.. Но в ММБ нет никаких опций, позволяющих назначить кнопке "сохранить" диалогового окна какой-либо скрипт.. Каким же образом мне тогда запустить скрипт сохранения - StrToFile в момент нажатия кнопки "сохранить" диалогового окна?
 
basmeДата: Понедельник, 03 Декабря 2007, 23:02 | Сообщение # 4
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Дело в том, что при нажатии кнопки "Сохранить" автоматически происходит запись пути к выбранному файлу в константу CBK_OpenFile, и продолжается выполнение скрипта. То есть нужно просто написать команды подряд, например, так:
Code

SaveFile("Text Files (*.txt)|*.txt|All Files|*.*||","*.txt")
file$=CBK_OpenFile
RetVal=StrToFile(file$,string$,TRUE,TRUE)

И при нажатии на кнопку всё будет ОК! biggrin
 
toizyДата: Понедельник, 03 Декабря 2007, 23:18 | Сообщение # 5
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (basme)
И при нажатии на кнопку всё будет ОК!

Не совсем верно. После нажатия кнопки переменная OpenFile$ содержит полный путь к выбранному файлу. Т.е. сценарий должен выглядеть таким образом:
Code
**s$ - переменная с текстом, который хотим сохранить
s$='Пример сохранения в файл'
SaveFile("Text Files (*.txt)|*.txt|All Files|*.*||","*.txt")
ReturnVal=StrToFile(OpenFile$,s$,TRUE,TRUE)

Этот сценарий сохранит переменную s$ в файл, путь к которому содержит переменная OpenFile$. OpenFile$ - это переменная, которая создаётся всегда после вызова команды SaveFile или OpenFile и содержит полный путь к файлу, который был выбран в диалоге, так что сразу после выбора пользователем файла или закрытия диалога выполнение сценария возобновляется, а мы имеем возможность узнать, какой файл выбрал пользователь. И тут есть один очень важный момент. Переменная OpenFile$ содержит полный путь к выбранному файлу, а переменная CBK_OpenFile - только имя файла. Но нам чаще всего нужен полный путь. Вот почему я здесь использую OpenFile$.

Однако, этот сценарий ещё не совсем готов. Дело в том, что если пользователь нажал кнопку "Отмена", то диалог закроется, а сценарий всё равно продолжит выполняться. Это неправильно, ибо переменная OpenFile$ теперь будет пустой, и программа никуда не сохранит переменную s$ и тихо при этом промолчит. Чтобы такого не было, нужно написать ещё одно условие:

Code
s$='Пример сохранения в файл'
SaveFile("Text Files (*.txt)|*.txt|All Files|*.*||","*.txt")
If (OpenFile$='') Then
   **сюда попадаем, когда пользователь отказался от сохранения
   Message("Была нажата кнопка "Отмена". Сохранение не выполнено.","")
   **дальше идти не за чем, поэтому выходим
   Return()  
End
ReturnVal=StrToFile(OpenFile$,s$,TRUE,TRUE)

Дальше немного сложнее. StrToFile сохраняет переменную s$ в файл OpenFile$, при этом получая от нас два параметра и возвращая значение в переменную ReturnVal. Тут я использовал два параметра, они оба TRUE (на заметку: можно вместо TRUE и FALSE писать 1 и 0 соответственно). Первый TRUE означает, что при записи в файл новый текст должен быть добавлен к файлу. Если этот параметр будет FALSE, то файл каждый раз перед записью будет очищаться. Второй TRUE означает, что новый текст будет добавлен на новую строку (грубо говоря, в начало переменной s$ будет добавлены символы переноса строки и возврата каретки, т.е. CHR(13)+CHR(10)). Если бы это был FALSE, то текст был бы добавлен без создания для него новой строки.
текст надо добавлять на новую строку.
Переменная ReturnVal нужна для того, чтобы ты мог определить, выполнена ли операция. Так что можно переписать этот простой сценарий, чтобы в случае ошибки (напр, файл в который пишем удалён, или закончилось место на диске) он показывал предупреждение:

Code

s$='Пример сохранения в файл'
SaveFile("Text Files (*.txt)|*.txt|All Files|*.*||","*.txt")
ReturnVal=StrToFile(OpenFile$,s$,TRUE,TRUE)
If (ReturnVal) Then
   **Сюда попадаем в случае успешного выполнения операции
   Message("Текст успешно соранён","")
Else
   **А сюда попадаем в случае любой ошибки
   Message("Ошибка! Текст НЕ сохранён","")
End


Жизнь оказалась не такой уж и забавной, как поначалу...
 
basmeДата: Вторник, 04 Декабря 2007, 18:34 | Сообщение # 6
MMB Club
Группа: Проверенные
Сообщений: 358
Репутация: 5
Награды: 2
Статус: Offline
Quote (toizy)
а переменная CBK_OpenFile - только имя файла.

Не понял... Сколько раз применял такой синтаксис, и, ёлки-палки, ВСЁ РАБОТАЛО!
Code

OpenFile("Текстовые файлы (*.txt)|*.txt|Log-файлы (*.log)|*.log|ini-файлы (*.ini) |*.ini|inf-файлы (*.inf) |*.inf|","*.txt")
of$=CBK_OpenFile
LoadText("Paragraph","FILE:of$")

И загружался текст из файла, без всяких проблем. А еслит вставить команду Message с параметром of$, то выдаёт отдельно имя файла.
 
as-masterДата: Вторник, 04 Декабря 2007, 20:02 | Сообщение # 7
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (basme)
И загружался текст из файла, без всяких проблем.

Оно конечно вроде и работает, а потом вдруг не заработает?
Ведь используемая тобой константа действительно содержит
только имя файла, а уж как ММВ запоминает путь - хрен ее знает
Поэтому данный скрипт следует признать ненадежным.

Вторую строку надо писать так:

Code
of$=OpenFile$

Переменная OpenFile$ однозначно будет содержать полный путь к файлу.


Да пребудет с вами ММВ!
 
DeemaДата: Вторник, 04 Декабря 2007, 20:45 | Сообщение # 8
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
Спасибо большое за пояснения - буду разбираться..
 
toizyДата: Вторник, 04 Декабря 2007, 20:52 | Сообщение # 9
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
я бы не стал делать ненужное присваивание of$=OpenFile$, можно просто использоватьOpenFile$

Жизнь оказалась не такой уж и забавной, как поначалу...
 
DeemaДата: Воскресенье, 16 Декабря 2007, 19:07 | Сообщение # 10
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
Наивно думал, что при сохранении переменной в текстовый файл с помощью StrToFile(OpenFile$,s$,TRUE,TRUE)
каждая строковая переменная сохраняется только в одной строке файла. Пытался при зарузке переменных в программу по номерам строк их идентифицировать. Но видимо в текстовом файле есть предельная длина строки и поэтому текст переносится на следующую строчку. То есть, если правильно поиимаю, то чтобы мне организовать правильное сохранение в файл и потом загрузку из него не обойтися без разделителей, с помощью которых прога будет понимать, что одна переменная кончилась и началась другая?
Подскажите, плиз, как правильно организовать сохранение большого кол-ва переменных в текстовый файл и потом загрузку их обратно в программу? А то я уже замучился..:(
 
as-masterДата: Воскресенье, 16 Декабря 2007, 20:07 | Сообщение # 11
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (Deema)
Наивно думал, что при сохранении...каждая строковая переменная
сохраняется только в одной строке файла.

Именно так и есть!!! Иначе и быть не могло.

Quote (Deema)
Но видимо в текстовом файле есть предельная длина строки

Не думаю... А скока там букаф???

Quote (Deema)
не обойтися без разделителей, с помощью которых прога будет понимать,
что одна переменная кончилась и началась другая

Во-первых, не переменная кончилась, а строка.
переменная будет тогда, когда строка в нее загрузится.
Во-вторых, в данном случае никакие разделители не нужны.

Quote (Deema)
как правильно организовать сохранение большого кол-ва переменных
в текстовый файл и потом загрузку их обратно в программу

Какого именно количества переменных?

Например, в моей кулинарной книжке, в каждом разделе, около 350-400 рецептов.
Соответственно в каждом текстовом файле базы - 350-400 строк. Причем чтобы ты мог
представить длину строки, скажу, что она содержит название рецепта, описание его
приготовления и список ингредиентов.

А поскольку все данные, относящиеся к одному рецепту, записаны в одну строку
(а переменных по сути три), то там используются делимитры (разделители). Но в твоем
случае это не нужно.

Кстати, все переменные из списка рецептов грузятся в программу СРАЗУ!!!

В другой моей программе, Know Extension Pro, используется база определений
на английском языке, содержащая... 23 тысячи строк!!! Правда, вся она в программу
не грузится, а из нее извлекаются данные по мере обращения к ним.


Да пребудет с вами ММВ!
 
toizyДата: Воскресенье, 16 Декабря 2007, 20:08 | Сообщение # 12
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Код в студию

Жизнь оказалась не такой уж и забавной, как поначалу...
 
as-masterДата: Воскресенье, 16 Декабря 2007, 20:16 | Сообщение # 13
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (toizy)
Код в студию

Это ты кому? И какой код?







Да пребудет с вами ММВ!
 
toizyДата: Воскресенье, 16 Декабря 2007, 20:34 | Сообщение # 14
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (as-master)
Это ты кому? И какой код?

просто я опять опоздал...


Жизнь оказалась не такой уж и забавной, как поначалу...
 
DeemaДата: Вторник, 18 Декабря 2007, 22:12 | Сообщение # 15
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
Quote (as-master)
Deema, ну что там у тебя? Разобрался с вопросом или нет?
Давай-ка отпостись тут, нам ведь нужно знать, помогли или нет.

Спасибо! Пока не разобрался.. У меня не такое большое кол-во переменных, как в кулинарной книге и объем переменных не такой большой, Но когда я сохраняюсь, одна из переменных сохраняется не на одну строку, а на две. Вот я и подумал - может просто в тхт-файлах есть предельная длина строк.. Но если нет - значит в чем-то другом трабл - буду копать..
У меня 157 строковых переменных. Некоторые достаточно большие по объему текста..

ВОт как я организовал запись:

Code

For i=1 To 157
   String$[1]=obva$
   String$[2]=stavka$
   String$[3]=srok$
   String$[4]=limit_finance$
   String$[5]=beneficiar$
   String$[6]=obespech_garant$
....
   Rv=StrToFile(OpenFile$,String$[i],TRUE,TRUE)
Next i

А вот как загрузку:

Code

OpenFile("Текстовые файлы (*.txt) |*.txt|","*.txt")
For i=1 To 157
   obva$=StrFromFile(OpenFile$,1,1)
   stavka$=StrFromFile(OpenFile$,2,1)
   srok$=StrFromFile(OpenFile$,3,1)
   limit_finance$=StrFromFile(OpenFile$,4,1)
   beneficiar$=StrFromFile(OpenFile$,5,1)
   obespech_garant$=StrFromFile(OpenFile$,6,1)
...
Next i

По непонятной для меня причине не весь текст загружается в переменные правильно.. И посмотрев текстовый файл я обнаружил, что почему-то переменная, которая должна например находится на 45-й строчке текстового файла, находится на 47-й его строчке..

 
as-masterДата: Вторник, 18 Декабря 2007, 22:32 | Сообщение # 16
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (Deema)
когда я сохраняюсь, одна из переменных сохраняется
не на одну строку, а на две

А это значит, что в самой переменной изначально две строки, то есть
в ней есть символ переноса строки. Его нужно найти и удалить.

В кулинарной книжке я столкнулся с этой проблемой. Мне нужно было,
чтобы весь рецепт был в одну строку, потому-что описание должно было
представлять собой одну переменную, записываемую с двумя другими -
названием рецепта и составом продукта в одну строку с делимитерами.
45-я строка - 45-й рецепт. И т.д. Казалось бы - что проще, ведь когда
вводишь текст в эдитбокс, он всегда будет только в одну строку.

Однако юзер ведь может скопировать рецепт из интернета и вставить
в эдитбокс! И всё - там будет сколько угодно переносов строк, и переменная
сохранится в текст базы неправильно - займет не одну, а несколько строк,
что приведет к ошибкам всей программы.

Поэтому мне пришлось решить эту задачу: теперь, когда юзер вставляет текст
откуда-то ни было, все переносы строк удаляются автоматически. А заодно
убираются двойные-тройные пробелы и еще всякая мелочь smile
Возьми программу и зазырь.

Quote (Deema)
я обнаружил, что почему-то переменная, которая должна например находится
на 45-й строчке текстового файла, находится на 47-й его строчке..

Вот как раз потому, о чем написано выше :)


Да пребудет с вами ММВ!
 
Alex3AДата: Среда, 19 Декабря 2007, 12:33 | Сообщение # 17
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Да, бывают такие вещи.
Вообще, строка - это некая последовательность кодов заканчивающаяся нулем (не символом, а кодом).
Не все коды имеют символьное отображение. Кроме того, в разных редакторах, имеются коды форматирования,
которые мы не видим, текст вроде бы один и тот же, но состав кодов у них разный.
Каждый "приемник" текста имеет свои принцыпы обработки. Если скопировать текст из ворда или ворпада,
а затем вставить куда нибудь, к примеру в поле ввода, то возможно что туда попадет не только текст, но
и что то из кодов форматирования, и как это поле их будет воспринимать, сказать трудно.
В особо "тяжких" случаях, я открываю текст в шеснадцатеричном редакторе, и смотрю какие кода
туда затесались. Наверняка, в компонентах билдера тоже есть отработка каких то кодов или их последовательностей
то ли по причине недоработок, то ли просто недокументированы.
Вот бы нашелся такой интузиаст, который выловил бы эти вещи!
 
DeemaДата: Суббота, 22 Декабря 2007, 21:34 | Сообщение # 18
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
as-master, еще раз большущее спасибо!
Скорее всего именно в этом и было дело - я совсем забыл, что в некоторые переменные добавлял в билдере код переноса сроки!

Добавлено (22 Декабрь 2007, 21:34)
---------------------------------------------
У меня и правда в некоторых переменных был код переноса строки. Я его убрал.
Но проблема все равно не решилась - нарыл на форумах, что в блокноте длина строки все-таки ограничивается 1024 символами. У меня судя по всему некоторые строки занимают больше и поэтому в текстовом файле, в который происходит запись, строки дробятся.. Когда я загружаю из файла переменные, из-за переноса строк все данные пуаются..:(
В этой ситуации не обойтись без массива и делимитеров?

 
as-masterДата: Суббота, 22 Декабря 2007, 22:15 | Сообщение # 19
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Ничего не слышал об ограничениях на длину строки.

Тем более при чем тут Блокнот? Если есть ограничение, то уж не на Блокнот,
а собственно на текстовый файл... Ведь в блокноте твой файл никто открывать
не будет, насколько я понимаю. Он используется только в приложении ММВ...

Ну а чтобы было какое-либо ограничение на длину строки в текстовом файле -
такое и представить трудно... идиотизм. Хотя, может я и не прав, может, чего-то
и не знаю.

Вот в ММВ действительно есть какое-то ограничение на длину скрипта. Но какое
именно - уже не помню. Во всяком случае, тебе-то уж точно хватит smile

Сейчас сделаю небольшую приблуду, чтобы промерить длину строк в файлах баз
моей кулинарной книжки. А как еще промерить? С помощью того же проекта ММВ smile

Потом отпишусь тут.


Да пребудет с вами ММВ!
 
DeemaДата: Суббота, 22 Декабря 2007, 23:22 | Сообщение # 20
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
Я на каких-то программистких форумах нашел насчет того, что вроде бы длина строки в текстовом файле ограничена..
 
as-masterДата: Воскресенье, 23 Декабря 2007, 00:13 | Сообщение # 21
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Вот, сделал небольшую программулинку для определения длины строк текстовых файлов.
Программулину возьмешь в прищепке, вот скриншот:

как видишь, в моих базах данных нашлась строка в 2199 символов.
Возьми себе эту утилитку - вдруг пригодится, строчки мерить smile
Кстати, сваял за 5 минут. А вестчь - полезная smile

Прикрепления: 1834618.png (13.1 Kb) · Media1.mbd (2.5 Kb)


Да пребудет с вами ММВ!
 
as-masterДата: Воскресенье, 23 Декабря 2007, 00:17 | Сообщение # 22
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Блин, на тебе - и не парься больше за длину строки smile

Оказалось, что у меня этот самый уголовно-процессуальный кодекс
сохранен в текстовый файл в ОДНУ СТРОКУ!!!
Ты вряд ли найдешь еще
где такой файл! Так что, как видишь, без малого миллион символов.
И пусть не звездят дурачьё, которые придумали байки о каких-то там ограничениях...

А действительно: если в файле нет вынужденных переносов строки? Ну нету, и всё тут?...

Зырь:

Прикрепления: 5193997.png (9.4 Kb)


Да пребудет с вами ММВ!
 
DeemaДата: Воскресенье, 23 Декабря 2007, 00:33 | Сообщение # 23
Новый участник
Группа: Пользователи
Сообщений: 24
Репутация: 0
Награды: 0
Статус: Offline
Круто!!! Спасибо! smile
Но теперь мне от этого еще хуже , т.к. в этом случае у меня вообще нет версий - почему же некоторые строки у меня переносятся. Все принудительные переносы, которые были у меня в переменных, я убрал..
Жесть какая-то - не получается сделать сохранение - загрузку данных.
Сегодня вот уже пробовал с разделителями. Сохраняет в файл нормально, а загружать из файла не хочет!
Что не так- не могу понять...
Code

For i=1 To 153

obva$=GetArrayItem(OpenFile$,#,i)
   stavka$=GetArrayItem(OpenFile$,#,i)
   srok$=GetArrayItem(OpenFile$,#,i)
   limit_finance$=GetArrayItem(OpenFile$,#,i)
...
Next i
 
as-masterДата: Воскресенье, 23 Декабря 2007, 00:38 | Сообщение # 24
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Не надо никаких разделителей - ищи, где у тебя зихер.
Должен быть перенос строки. Или лишняя пустая строка.
Как говорил мой шеф, "Чудес не бывает". Надо искать причину.

В сотый раз повторяю всем вам: ищите причину постепенно, пошагово.
Как в радиотехнике ищут неисправность - покаскадно. От входа к выходу,
и в каждом каскаде проверяют наличие сигнала и какой он.

Так и здесь: проверяй свой сценарий построчно. Каждую строку кода.
И контролируй, что получается на выходе этой строки.

Используй для этого мессаги с выводом переменных, выводи их в текстовый
временный служебный объект.

Сделай служебные кнопочки, выводящие переменные в любой момент работы
программы, чтобы ты мог посмотреть, что в них.

И так далее, и тому подобное...

Ёлы палы, ведь это так элементарно!...


Да пребудет с вами ММВ!
 
toizyДата: Воскресенье, 23 Декабря 2007, 09:45 | Сообщение # 25
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (Deema)
ВОт как я организовал запись:

Code

For i=1 To 157  
    String$[1]=obva$  
    String$[2]=stavka$  
    String$[3]=srok$  
    String$[4]=limit_finance$  
    String$[5]=beneficiar$  
    String$[6]=obespech_garant$  
....  
    Rv=StrToFile(OpenFile$,String$[i],TRUE,TRUE)  
Next i

А почему при каждой итерации присваивается с 1 по 7 переменную? Ведь в каждом проходе цикла сохраняется только одна - string$[i]? Исправь

Quote (Deema)
что в блокноте длина строки все-таки ограничивается 1024 символами

В блокноте - не в текстовом файле. В текст файле нет понятия длины строки, это всего лишь пачка байт, друг за другом. Блокнот в силу своего происхождения не может отобразить более 1024 симв на строку. Возьми хотя бы richedit - там неограничено.


Жизнь оказалась не такой уж и забавной, как поначалу...
 
as-masterДата: Воскресенье, 23 Декабря 2007, 15:41 | Сообщение # 26
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (toizy)
For i=1 To 157
String$[1]=obva$
String$[2]=stavka$
String$[3]=srok$
String$[4]=limit_finance$
String$[5]=beneficiar$
String$[6]=obespech_garant$ ....
Rv=StrToFile(OpenFile$,String$[i],TRUE,TRUE)
Next i

Это чушь какая-то...

Quote (toizy)
Блокнот в силу своего происхождения не может отобразить более 1024 симв на строку

Ах так? Либо я чё не понял, но вот тебе файл в одну строку, там больше 2000 символов,
блокнот его открывает.

Впрочем, да... Блокнот его открывает как три строки. Но ММВ работает с этим файлом,
кстати сохраненным именно в блокноте, как с файлом, содержащим одну строку.
Сам проверь (в прищепке).

Это я к чему? А к тому, что всё это НЕ ВЛИЯЕТ на правильность работы проекта, который
делает Deema, и пусть он ищет зихерок в своей работе, а не в ограничениях всяких
блокнотов, и вообще на стороне.

Проблема в тебе, Deema! Точнее, в твоем проекте.

Прикрепления: 0361659.zip (1.2 Kb)


Да пребудет с вами ММВ!
 
toizyДата: Воскресенье, 23 Декабря 2007, 17:10 | Сообщение # 27
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (as-master)
Либо я чё не понял

Либо ты чё не понял. Открывать-то открывает, но не в одну строку! Гыыыы

Добавлено (23 Декабрь 2007, 16:31)
---------------------------------------------
Открывает именно так как я и сказал.

А насчёт влияет - не влияет, не могу сказать. Вот только в цикле чушь какая-то понаписана. Срочно исправлять на!

Добавлено (23 Декабрь 2007, 16:52)
---------------------------------------------

Quote (as-master)
Это чушь какая-то...

Это ты про чё? Про то же, что и я? Я о том, что, если судить по представленному коду, то у чела 157 переменных, все 157 из которых присваиваются 157 раз, зато каждый раз в файл пишется одна переменная. Нужно сразу присвоить, а в цикле только сохранять. Ну, вот:
Code
String$[1]=obva$   
     String$[2]=stavka$   
     String$[3]=srok$   
     String$[4]=limit_finance$   
     String$[5]=beneficiar$   
     String$[6]=obespech_garant$   
For i=1 To 157   
   Rv=StrToFile(OpenFile$,String$[i],TRUE,TRUE)   
Next i

Добавлено (23 Декабрь 2007, 17:10)
---------------------------------------------
Ахтунг!

Quote (Deema)
Но видимо в текстовом файле есть предельная длина строки и поэтому текст переносится на следующую строчку

Фигня полная. Текстовый файл состоит из кучи байтов (от 0 до 255). Не там никаких ограничений, это заблуждение.

Quote (Deema)
не обойтися без разделителей, с помощью которых прога будет понимать, что одна переменная кончилась и началась другая?

Зачем? Сохраняющий код, который ты привёл выше, отлично работает. Открой сохранённый файл в блокноте и убедись, что каждая переменная на своём месте. Только если строки длинные, и будешь открывать блокнотом, убери в нём крыжик "Перенос по словам" smile

Quote (Deema)
Пытался при зарузке переменных в программу по номерам строк их идентифицировать.

Сперва покажи код, что ты написал. Может, ошибка в нём.

Quote (Deema)
как правильно организовать сохранение большого кол-ва переменных в текстовый файл и потом загрузку их обратно в программу?

Ну правильное сохранение у тебя уже есть. Теперь пиши сюда, как ты делаешь загрузку.

Теперь об ограничениях. Сценарий ММВ может содержать 128 килобайт текста, не более. Почему так - хрен его знает, разработчики так решили. Что касается блокнота, то у него специфика такая, сто он не может отобразить более чем 1024 символа на строку в том смысле, что остальное он переносит на другую строку. Это особенность контрола, который используется в блокноте для отображения текста. Например, рич-контрол, который, в частности, используется в редакторе сценариев ММВ, по умолчанию хранит до 64 кб текста (если не изменяет память). Но максимум для него - это 4 ГБ текста (а-бал-деть smile ). И я даже подозреваю, почему разработчики ограничили размер сценария smile Всё дело в подсветке синтаксиса. Она выполняется простым поиском по тексту с изменением атрибутов шрифта текстового поля. Стало быть, не сильно быстрая операция smile Вот и ограничили, чтобы тормозов не наблюдалось.


Жизнь оказалась не такой уж и забавной, как поначалу...
 
as-masterДата: Воскресенье, 23 Декабря 2007, 19:06 | Сообщение # 28
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
Quote (toizy)
Либо ты чё не понял. Открывать-то открывает, но не в одну строку!

Да я уже всё понял - вот же, я писал:

Quote (as-master)
Впрочем, да... Блокнот его открывает как три строки.

Quote (toizy)
Что касается блокнота, то у него специфика такая, что он не может
отобразить более чем 1024 символа на строку

Я это уже понял.
Вот блокнот, который хотя и не отобразит строку в 2000 символов, но зато он
точно покажет, что строка - всего одна, так как все строки там пронумерованы.

Кстати, очень удобный альтернативный блокнот, некоторые даже заменяют им
системный виндовый.

Я заменять не рекомендую, а вот пользоваться - да. Непременно!!!
По крайней мере, в нем сразу видно, сколько строк в твоем файле.


Добавлено (23 Декабрь 2007, 19:06)
---------------------------------------------
Кстати, этот блокнот - с подсветкой синтаксиса, всё это можно настраивать-перестраивать
под себя, еще куча разных полезных фишек, не говоря уже о том, что поиск и замена в нем
происходит в тысячу раз быстрее. Ну и плюс ко всему он спокойно открывает текстовые файлы
любого размера, html-файлы... А виндовый блокнот на текстовом файле в 1 мб уже умирает...

Прикрепления: Notepad2.zip (232.2 Kb)


Да пребудет с вами ММВ!
 
Alex3AДата: Воскресенье, 23 Декабря 2007, 22:27 | Сообщение # 29
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (toizy)
Текстовый файл состоит из кучи байтов (от 0 до 255).

Почти верно, только 0 -это конец строки.
Quote (as-master)
А виндовый блокнот на текстовом файле в 1 мб уже умирает...

А он и предназначен, только для файлов небольшого размера.
Так что
Quote (toizy)
Сперва покажи код, что ты написал. Может, ошибка в нём.

Скорее всего именно так. Перевод строки это комбинация кодов ПС ВК, перевод строки и возврат каретки.
Коды 13 и 10, а найти их можно в шеснадцатеричном редакторе. Справедливости ради
замечу, что бывают и иные коды, в иных системах.
Это что касаемо понятия строка, как елемента форматирования текста, а всмысле типа данных,
то до первого появления кода 0, и переводов строки может быть сколько угодно(строк, как елементов форматирования текста).
 
toizyДата: Воскресенье, 23 Декабря 2007, 22:40 | Сообщение # 30
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Quote (Alex3A)
Почти верно, только 0 -это конец строки.

Вовсе нет, если строка Юникодовая. Мы гворим в общем, так что юникодовые файлы нужно принимать в рассчёт тоже.

Между тем обычные текстовые файлы тоже могу содержать нули, что никак не отразится на его чтении.


Жизнь оказалась не такой уж и забавной, как поначалу...
 
Форум MMB » Всё о программе Multimedia Builder » Сценарии в MMB » SaveFile (Сохранение текста с помощью диалогового окна)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: