powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перезапись файла
6 сообщений из 6, страница 1 из 1
Перезапись файла
    #37063135
ДаркТМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация такая.
Есть два комбобокса, куда вводятся номера годов.
Файл, в котором к каждому году соответствуют параметры (1991 1 2 3 4 5), задающиеся из текст боксов.
Записать файл сразу на 40 лет (1991 - 2030) с одинаковыми параметрами у меня получилось.
Код: plaintext
1.
2.
3.
4.
5.
For i =  0  To  39 
    Print #mo, year & vbTab & CSng(Text1) & vbTab & CSng(Text2) & vbTab & CSng(Text3) & vbTab & _
    CSng(Text4) & vbTab & CSng(Text5) & vbTab & CSng(Text6) & vbTab & CSng(Text7) & vbTab & CSng(Text8) & _
    vbTab & CSng(Text9) & vbTab & CSng(Text10) & vbTab & CSng(Text11)
    year = year +  1 
Next i

необходимо сделать так, чтобы можно было вводить интервалами параметры, задавая года через комбобоксы (с 1991 по 1996 одни, с 1996 года - другие).
Понимаю, что нужно сделать, а вот не понимаю - как.
Надеюсь, доступно объяснил проблему.
...
Рейтинг: 0 / 0
Перезапись файла
    #37063242
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитал сорок раз.
Совершенно непонятно, что вызывает проблему.
Предлагаю приложить пример файла и скриншот формы - это будет наглядно.
...
Рейтинг: 0 / 0
Перезапись файла
    #37063348
ДаркТМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так и понял, что лучше не писать с работы, когда тебя то там, то здесь тыкают, но не удержался.
По порядку:
1. Существует файл, в который записываются значения в порядке - год \ параметры (1, 2,3....n)
2. Параметры задаются пользователем через текстбоксы (все, кроме параметра год - задается программно (переменная Year))
3. На данный момент все реализовано так, что те параметры , которые задает пользователь - записываются в файл сразу для всех существующих лет ( всего годов в программе 40 (1991 - 2030)). Цикл, записывающий продемонстрирован в первом сообщении. Внутри файла все выглядит следующим образом :
Year par1 par2 .... parN
1991 1 2 ..... N
1992 1 2 ..... N
и так для каждого значения Year до конца цикла.

4. Необходимо сделать так, чтобы пользователь мог вводить для разных лет (периодов (например с 1991 - 2000 )) разные параметры.

Мое предположение об удобстве - сделать комбобоксы , в которых пользователь выбирает промежуток (комббокс1 = 1991; комбобокс2 = 2000), присваивает этому промежутку параметры (по нажатию кнопки). Выбирает следующий промежуток и присваивает ему другие параметры. То есть возможность задачи различных параметров для всего периода.

Собственно вопрос в чем :

Понятно, что необходимо сделать - нужно, чтобы считывались значения комбобоксов, эти значения переходили в границы цикла (понимаю, как сделать). Файл записывается для выбранного промежутка годами и параметрами. Но! Как сделать, чтобы при дальнейшем выборе промежутков (в комбобоксах) файл не начинал записываться с начала, а начинал записываться с новой строки (продолжая файл), и при желании - можно было легко изменить уже заданные параметры (то есть сделать поиск по файлу и перезаписать нужные строки). Вот, собственно как это сделать - не могу понять. Надеюсь, что сейчас изложил понятнее суть вопроса (безумные дни нынче - соображалка не работает).
...
Рейтинг: 0 / 0
Перезапись файла
    #37063365
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть, если я правильно понял, проблема в том, что вы хотите организовать произвольный доступ к файлу, но не знаете как.

1) Если параметры РАЗНОЙ длины, то все плохо, вам придется ПОЛНОСТЬЮ перезаписывать файл, при изменении, скажем, первой строки.

2) Такая задача обычно решается не через текстовый файл, а через файл БД достаточно элементарно. При этом можно прикрутить сетку и сделать удобный интерфейс для пользователя типа экселевского листика.
2а) Если текcтовый файл не является самоцелью - использовать файл БД (mdb)
2б) Если текстовый файл нужен по окончании работы - работать с БД, по кнопке "редактирование завершено" данные однократно выгружаются из БД в текстовый файл
2в) Если тектовый файл нужен непрерывно в процессе редактирования (используется другим параллельным процессом) - при старте программы загрузить все данные в память, там же редактировать и выгружать в текстовый файл при изменении пользователем комбобокса. Ну или аналогичный вариант 2б - с выгрузкой сразу.
...
Рейтинг: 0 / 0
Перезапись файла
    #37063509
ДаркТМ,
после сборки тщательно обработать напильником
Код: 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.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
' **********************************************************
' на форме:  
'    два комбобокса comboStartYear, comboEndYear (выбор номеров годов)
'    надцать текстбоксов Text1, Text2, ..., TextN (для хранения параметров, имена критичны!)
'    две кнопки btnSaveBounder, btnWriteToFile
'    опционально: текстбокс textFileName (для хранения имени файла, имя не критично)
'         использование textFileName см.в Private Sub btnWriteToFile_Click()        


' **********************************************************
' В модуле формы
Option Base  0 

Private Type Bounders
	startyear As Integer
	endyear As Integer
	paramstr As String
End Type

Const iParamCount%= 11  'количество параметров

Dim arrBound() As  Bounders

' **********************************************************
' обработчик OnLoad формы
Private Sub Form_Load()
	Me.btnWriteToFile.Enabled = False
	ReDim arrBound( 0 )
End Sub

' **********************************************************
' обработчик OnClick кнопки btnSaveBounder
Private Sub btnSaveBounder_Click()
	Dim i%, s$
	
	If comboStartYear.Value > comboEndYear.Value Then 
	' коррекность задания периода
		MsgBox "Неверно задан период"
		Exit Sub
	
	ElseIf
	' проверка на наличие незаполненных параметров, формирование строки параметров
		s = ""
		For i =  1  To iParamCount
			If Me("Text" & i).Text = "" Then
				Me("Text" & i).SetFocus
				MsgBox "Не заполнен параметр '" & CStr(i) & "'"
				Exit Sub
			Else
				s = vbTab & CSng(Me("Text" & i).Text) & s
			End If
		Next i
		
	End If
	
	i = UBound(arrBound)
	With arrBound(i)
		.startyear = CInt(Me.comboStartYear.Value)
		.endyear = CInt(Me.comboEndYear.Value)
		.paramstr = s
	End With

	If i =  0  Then 
		Me.comboStartYear.Enabled = False
		Me.btnWriteToFile.Enabled = True
	End If
	Me.comboStartYear.Value = CInt(Me.EndStartYear.Value) +  1 
	
	ReDim Preserve arrBound(i +  1 )
End Sub


' **********************************************************
' обработчик OnClick кнопки btnWriteToFile
Private Sub btnWriteToFile_Click()
	Dim mo%,  i%, ii%
	
	mo = FreeFile()
	
	' (!) нет проверки на корректность имени файла
	' (!) нет запроса на перезапись существующего файла
	Open Me.textFileName.Text For Output As #mo 
	
	For i =  0  To UBound(arrBound)
		With arrBound(i)
			For ii = .startyear To .endyear
				Print #mo, ii & .paramstr
			Next ii
		End With
	Next i
	
	Close #mo
	ReDim arrBound( 0 )
	Me.btnWriteToFile.Enabled = False
	Me.comboStartYear.Enabled = True
End Sub
...
Рейтинг: 0 / 0
Перезапись файла
    #37068085
ДаркТМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное спасибо, завтра на работе попробую... Хотя варианты шокера, конечно - сложнее для меня... xD
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перезапись файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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