![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Привет! Никак не могу понять, как осуществить сие.
![]() Имеется 50 файлов *.txt с большим количеством однотипных строк: 1 сентября 1945 12.1 14.4 18.4 14.3 2 сентября 1945 9.1 11.4 15.7 0 .................................................. . итд подряд все дни ............................................... 30 мая 1946 5.7 12.4 17.7 0 31 мая 1946 7.9 12.7 19.1 0.8 задача! каким-то образом (каким?) убрать все данные кроме даты (число - месяц - год) и второго числа после даты (на примере 1й строки это 14.4) ну или не убирать, а заполнить массив... ![]() короче говоря, нужно иметь температуру (14.4 на примере 1й строки, остальное не нужно ), связанную с конкретной датой, чтобы потом запустить цикл по каждому файлу от 1 сентября n-го года до 31 мая (n+1)-го года и выбрать по определенному критерию нужную дату. подскажите пожалуйста, какие тут могут быть варианты. Последний раз редактировалось double_tooth, 01.06.2008 в 17:47. |
#2
|
|||
|
|||
![]() Это еще легкая задача!
пишешь функцию для одной строки, которая возвращает дату и темпиратуру. копируем строку в переменную S Dele(s,0,pos(' ',s)) Delete(s,0,pos(' ',s)) //после этих манипуляций получаем pos(' ',s)+4 это позиция последнего символа даты Copy(OriginalStr,1,pos(' ',s)+4 ) потом опять Delete(s,0,pos(' ',s)) ищешь второй пробел после даты Delete(s,0,pos(' ',s)) * * * до второго числа после даты. COPY(S,0,pos(' ',s)) получаешь второе число. Написал грубо, без компилятора, главное идея =) Последний раз редактировалось Burka, 01.06.2008 в 20:42. |
#3
|
|||
|
|||
![]() спасибо
сейчас попробую разобраться. |
#4
|
|||
|
|||
![]() ладно, сознаюсь...
последний раз имел дело с Паскалем-дельфи 6 лет назад ![]() Но тем не менее не могу вспомнить или найти простейший пример с работой с текстовым файлом. То есть для моего примера нужно что? -подписать переменную типа файл (AssignFile) ? -открыть его для чтения и записи одновременно? -стереть из него ненужное -сделать двумерный массив 2 x 270 (примерно) -и так 150 раз для разных файлов. а как зациклить это для файлов внутри одной папки? имена у них типа 1943, 1944, 1945, 1956......1995. (все с расширением *.txt) |
#5
|
|||
|
|||
![]() Я делал нечто похожее не давно, выложу тебе процедурки, а уж прогу собирай сам.
1 Перебор файлов в одной папке и вывод имен в список Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); Var SearchRec:TSearchRec; begin If Key<>#13 then exit; ListBox1.Clear; If FindFirst(Edit1.Text+'*.ss', faAnyFile, SearchRec)=0 then repeat ListBox1.Items.Add(SearchRec.name); {SearchRec.name - имя файла ExpandFileName(SearchRec.name) - имя файла с полным путем} until FindNext(SearchRec) <> 0; FindClose(SearchRec); end; Получение списка строк из файла Procedure GetList(Const Path:string; Var ML:TMyList); Код:
TMyList = array of string; ... Procedure GetList(Const Path:string; Var ML:TMyList); var F :textfile; s:string; i:integer; begin AssignFile(f, path); Reset(F); Setlength(ML,0); i:=-1; While not EOF(F) do begin ReadLn(F,S); Inc(i); setlength(ML,I+1); ML[i]:=S; end; Ну вот что есть. Можешь двумерный массив, а можешь взять таблицу БД сделать в ацессе, удобнее будет. |
#6
|
|||
|
|||
![]() Я, конечно, нуб, но
что-то не понимаю насчет первой процедуры. Я добавил в форму ЛистБокс и Эдит, на который навесил эту самую процедуру (ОнКейПресс)... И что? Ничего не происходит. ![]() А что за расширение '*.ss' ? ![]() я может не прав, но я ввожу (при компиляции) в Эдит имя директории и нажимаю Ентер. Но комп бимкает. ![]() Чего-то не хватает? (Не бейте только за дебилизм, я с Дельфи пару дней назад познакомился) |