|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.03.2009, 10:27 | #1 |
Форумчанин
Регистрация: 24.06.2008
Сообщений: 516
|
Изменение размеров цикла
Уважаемые знатоки!
Подскажите пожалуйста, как динамически изменять размеры цикла? Например. Есть данные порядка 10 000 записей (134 значения в записи). Данные считываются циклом и записываются в массив. Но если 132 или (и) 133 значение <> 0, то добавляются по 8 значений. 132 = 0 133 = 1 Значений 142(134+8) 132 = 1 133 = 2 Значений 158(134+24) Вот такая проблема. Как это организовать в цикл?
Можно сделать все! Было бы время, да деньги...
|
16.03.2009, 10:47 | #2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Например, так:
Код:
Код:
|
16.03.2009, 10:57 | #3 |
Форумчанин
Регистрация: 24.06.2008
Сообщений: 516
|
For i = 1 To infoDBS(27)
j = 1 For j = 1 To 131 tempFile(i, j) = Rez((Mid(StrConv(vesFile, vbUnicode), poz, Polya(2, j)))) poz = poz + Polya(2, j) Next j Next i Вот код. Обычные два цикла. Один листает записи, другой значения. Но вся проблема в том, что мне нужно не просто прервать цикл. А в зависимости от значения полей 132 и 133: - либо продолжить считывать следующие n(131)*8 полей - либо пропустить одну часть и считывать n(132)*8 полей - либо перейти к следующей записи. p.s. Rez() - это моя функция преобразования значений.
Можно сделать все! Было бы время, да деньги...
|
16.03.2009, 11:11 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Код абсолютно непонятен.
Начиная с того, что такое infoDBS(27), и заканчивая считыванием n(131)*8 полей (непонятно, какой код отвечает за считывание) При таких исходных данных (как приведённый Вами код) написать правильный цикл вряд ли будет возможно. |
16.03.2009, 11:25 | #5 |
Форумчанин
Регистрация: 24.06.2008
Сообщений: 516
|
For i = 1 To 5000
j = 1 For j = 1 To 131 tempFile(i, j) = Rez((Mid(StrConv(vesFile, vbUnicode), poz, 2))) 'Значение из списка Next j Next i В данном цикле считали 131 значение 1 записи. Далее если 132 значение <> 0, значит считываем следующие 8 значений (если 132 = 1 то 8 значений, если 132 = 2 то 16 значений и т.д.) Соотвтетственно после всех этих значений идет поле 133 (на самом деле 132 оно при 131 = 0, а если нет то оно сдвигается на 8 позиций) С 133 полем то же самое, если <> 0 то 8 позиций. Попробую привести пример в значениях. Пример 1 поле 132 = 1 поле 132_1 = 22 поле 132_2 = 1 поле 132_3 = 0 ... поле 132_8 = 0 поле 133 = 0 конец Пример 2 поле 132 = 0 поле 133 = 2 поле 133_1(1) = 13 поле 133_2 = 2 ... поле 133_8(1) = 1 поле 133_1(2)=14 поле 133_1(2)=1 ... поле 133_1(2)=1 конец Вот примерно так.
Можно сделать все! Было бы время, да деньги...
|
16.03.2009, 13:05 | #6 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
тут не видно, где данные считываются из файла. задача описана туманно.
я так понимаю, из файла считывается 133 байта данных, 131 байт - переводится в массив, а дальше по состоянию 132 и 133 байтов принимается решение, о том сколько еще байт относятся к данной записи, или начинать читать новую. если считан весь файл в переменную - обрабатывайте последовательно ее, а если файл читается порциями по 133 байта, то анализируйте 132 и 133 байт и решайте что делать дальше.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
16.03.2009, 13:21 | #7 |
Форумчанин
Регистрация: 24.06.2008
Сообщений: 516
|
А зачем как считываются данные?
Весь файл считан как: Dim vesFile() As Byte Open "filename" For Binary As #1 fSize = LOF(1) ReDim vesFile(1 To fSize) Get #1, 1, vesFile() Close #1 Весь файл считан в переменную. И потом идет его обработка. В том то и дело! Не могу сообразить как мне проверить эти байты. Они же находятся не в конце строки... И потом после первого условия следует второе. А позиция второго условия скачет в зависимости от первого... Вот и не могу придумать как это реализовать...
Можно сделать все! Было бы время, да деньги...
Последний раз редактировалось mchip; 16.03.2009 в 13:24. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
С++ Builder Изменение размеров компонентов на форме во время исполнения программы | Bair | C++ Builder | 3 | 18.12.2008 13:43 |
Изменение размеров | pinksky | Microsoft Office Excel | 3 | 18.04.2008 15:52 |
Изменение размеров элементов | romets | Win Api | 2 | 18.02.2008 23:28 |
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat | McMilin | Помощь студентам | 7 | 11.11.2007 14:10 |
Изменение размеров столбцов в DBGrid | Elena | БД в Delphi | 1 | 15.05.2007 11:41 |