![]() |
|
![]() ![]() ![]() |
|
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Кто-нить помогите с кодом для ввода названия файла в цикле!Вот код
Мне очень надо,чтобы все работало автоматически! Но прога выдает ошибку! |
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
У меня щас нету времени чтобы посмотреть что к чему, но если тебе нужно загрузить данные с одного файла, потом дописать новые данные в конец и сохранить в новый файл, то вот самые простые грабли
Вообщем пока это, а вечером дома посмотрю мож и черех старые функции решу |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Это конечно хорошо,но мне надо в старом варианте!
А точнее,переделать этот код,чтобы работал?
Имя файла в цикле изменяется на единицу,как все это сделать правильно,и чтобы FILE*p=fopen("FN","r"); понимал имя файла? ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
||||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 9 Всего: 23 |
Вот держы долно работать или и это не подходит
Это сообщение отредактировал(а) SenkraD - 28.4.2007, 11:05 |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
||||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Функция открытия файла должна работать, если такой файл существует. Посмотрите в отладчике имя получившегося файла и убедитесь в его наличии на диске в текущем каталоге. Возможно нужно установить полный путь к файлам. |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Это понятно Anikmar,но если файла с номером 2363 нет,а файлы 2362 и 2364 есть,
чтоб прога сильно не ругалась,а просто проверила,и если файла нет,запустить следующий цикл? ![]() У меня в этом и проблема! Это сообщение отредактировал(а) AFenix85 - 29.4.2007, 10:29 |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
думаю понятно что файлы называются 02V.dat 03.dat ... 010.dat и находятся в директории с программой
|
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
codelord,а как у меня прочитать из ch например 20 произвольных символов?
![]() |
|||
|
||||
codelord |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
ну раз всеравно пользуешься Vcl, например так
c кодом выше разобрался? т.е хотел сказать подошел? Это сообщение отредактировал(а) codelord - 29.4.2007, 11:40 |
||||
|
|||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Так может сделать более универсально? Вижу два подхода: 1. В лоб и не очень качественный. Перед открытием очередного файла проверяем его наличие на диске с помощью функции FileExists 2. Более изящный и как бы сделал я: Я бы получил список имеющихся в директории файлов по маске и открывал бы их по списку. |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
||||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Подход, похожий, на мой первый вариант. Только мой враиант будет работать несколько быстрее - так как только проверит наличие файла Считаю такой подход в корне неправильным ![]() Допустим, у нас есть только файлы с номерами 1 и 5000. Для того, чтобы обработать всего 2 файла, потребуется проход минимум 5000 циклов и 4998 холостых попыток открыть два файла! Точно не мой стиль! Причем второй-то файл успешно открывается и закрывается в холостую. Хоть бы открытие за проверку вынесли что ли. Очень неудачный подход, на мой взгляд. |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Это конешно хорошо,что пишите
![]() Спасибо codelordда,я разобрался и все получилось ![]() А названия файлов я ввожу в Edite,так что ничего в холостую не пройдет,а если надо будет открыть два файла,открою отдельно!
Я имел ввиду здесь взять из ch произвольный симв массив,мне потом сортировать их надо будет ![]() |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
твой первый вариант и что ? нету файла что ты будешь делать ? наверно писать continue ? Ко всему прочему напиши 5000 пусть будет в холостую посмотри сколько займет времени у процессора. и третье я код исправлял а не писал думаю это понятно. Добавлено через 11 минут и 38 секунд
не понял, покажи пример строки и что надо взять и куда взять. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Ну зачем так бурно реагировать? ![]() Свой первый вариант я тоже назвал в лоб и А почему мой маленько быстрее будет? Потому, что вызов функции FileExists - единственная проверка. А вашем варианте она будет через функцию открытия файла. Т.е., вы вызываете функцию открытия файла, она проверяет его наличие, и в случае отсутствия возвращает ошибку. Ну дайте, я немного позанудствую. Уж исправлали бы и это ![]() А вообще - странный подход все-таки, согласитесь. Перебирать все возможные имена файлов в цикле вместо того, чтобы взять их действительный список... Ну программирование оно на то и творчество - нравится так, значит делайте так. Работает то правильно - а это все-таки главное. не понял, покажи пример строки и что надо взять и куда взять. Я понял так, что человек спрашивает каким образом взять подстроку из символьного массива. AFenix85, Предлагаю воспользоваться функцией strncpy (посмотрите хелп по ней). Только не забудьте добавить 0 в конец результирующей строчки. |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Вобщем из строки ch мне надо выбрать строку,которая читается из Edita.То есть сравнить и найти колличество пробелов до этого сравнения!
Вот например кусок ch=" tm55 tm60 tm65 tm70 tm75 tm80 tm85 tm90 vx55".Он читается автоматически в проге из файла! В Edite пусть будет написано tm85!Как сравнить эти два разных типа и провести учет пробелов! ![]() А потом мне надо будет произвести считывания и других строк с уже известного "пробела" числа для его обработки ![]()
Это немного не то,что мне надо было! |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
P.S.
codelord, за плюсы спасибо ![]() Добавлено через 1 минуту и 58 секунд AFenix85, вам чистый Си++ нужен? через AnsiString мне кажется удобнее малехо будет |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Я не виноват,мне дали файлы и сказали их посчитать по особому ![]() А мне куда деваться,вот и ищу пути побыстрее сделать прогу ![]()
Я не понимаю как это использовать,потому и не использую ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
В общем то использовать базовые вещи языка можно, но более сложные вещи уже реализованы и в STL и в VCL - тут дело вкуса. Есть стандартные строковые типы данных, в которых реализован поиск в строке подстроки. На примере чистого Си я уже не помнб есть ли функция поиска строки в подстроке В VCL есть StrPos Нам надо найти строку в подстроке, а затем с найденной позиции посчитать количество пробелов слева. |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
приблизительно так (там где идет считывание из файла)
допустим то что ищем лежит в Edit3
|
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
||||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
||||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Если речь об AnsiString, то для этого функция есть:
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 1 Всего: 23 |
А может быть лучше так читать файл
![]() -------------------- i_i (';') (V) ![]() |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Voldemar2004, я это знаю, но мне надо именно в форме
![]() |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Помгите с одной проблемкой!Вот код:
Как здесь сделать так,чтобы в ch найти s и найти длину строки ch до этого совпадения? ![]() Никак не могу с этим справиться сам!Подскажите ![]() ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Что-то в этом роде:
|
|||
|
||||
Weaver |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 2.12.2004 Где: Stavropol Репутация: нет Всего: нет |
Ребята, извините, вот вы тут занимаетесь извратом, насколько я понял.
Задача простая, но решение у вас очень замороченное. По нормальному надо расчитать каталог в массив, затем проверять файл, который хотим открыть на наличие в массиве, если он там есть, то открываем его и читаем. Это получится очень быстро и надежно. |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
||||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Ребята,я впал в ступор,башка не варит!
![]() Напишите примеры как из Edit1->Text перейти к char ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
||||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
||||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Матом? Или текст ошибки есть? ![]() -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
||||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Так так и надо! Там оба параметра char* Добавлено через 1 минуту и 8 секунд Зачем &s? просто s (оно же char*). -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Память под строку не забудьте выделить.
Не просто char *s; А что-то вроде char s[100]; или что-то в этом духе. |
|||
|
||||
AFenix85 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
не klin все равно выдает ошибку и ставит стрелку там где у меня в коде звездочки!
![]()
Вот весь мой код,может кто посмотрит и найдет ошибку ![]()
|
||||
|
|||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
||||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
Не информация секретная ![]() А если серьезно, то текст ошибки действительно не помешал бы, а то разгребать весь код (там все-таки файлы используются) - это время. Которого так не хватает нам в жизни ![]() -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Debugger Exception Notification
Project Project1.exe raised exception class EAccessViolation with message 'Access violetion at address 0045D7C5 in module 'Project1.exe'.Read of address 0096AE45'.Process stopped.Use Step or Run to continue. ну че,легче вам от этого? ![]() |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
На самом деле лично мне да. Потому, что в приведенных вами кодах есть 2 места со звездочками. Мне было интересно как именно ругается комп. Уверен на 99%, что ошибка здесь:
Вы на 100% уверены, что fscanf не цепанет строку длиннее 6 символов? Так как ваш массив предназначен только для 7 символов в каждой строчке (включая 0), то вариант порчи памяти весьма вероятен. Проверьте под отладчиком что там реально считывается. P.S. Я бы не стал из файла считывать в такой ограниченный буфер без какого-либо контроля длины. Если файл битый - программа слетит за милую душу - нигде нет защиты от этого. |
|||
|
||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
Anikmar дело в том,что моя таблица уже составлена так,что там длина ВСЕХ чисел и заголовков 3,4,5,6 символа и пробел (\0 является вторым пробелом но его не учитываем)!
А не могли бы вы более конкретно обьяснить почему именно этот цикл!? Вся моя прога работает,но если я отключу ввод из Edita, хотелось из него!Ну да ладно,главное работает исправно без этого,хоть и очень обьемный текст проги получается! |
|||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: 20 Всего: 25 |
AFenix85, Согласен с Anikmar, насчет контроля длины.
Дело не в цикле, а в функции fscanf! -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Если вы беспокоитесь за конструкцию с Edit то смотрите сами:
Вы делаете так:
Но коль уж пользоваться AnsiString и скорость не так критична, то можно вообще отказаться от такого подхода. Пишите просто так:
|
||||
|
|||||
AFenix85 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 20.4.2007 Где: Россия,Иркутск Репутация: нет Всего: нет |
||||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Пройдитесь отладчиком и посмотрите, что эта функция реально выдирает из файла. Мне кажется она может портить память. Замените fscanf(p,"%s",&ss[c][0]); на char *sTemp[200]; fscanf(p,"%s",sTemp); И посмотрите - что реально за каждый проход циклас считывается. Нет ли там строки длиннее 6 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |