![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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' ? я может не прав, но я ввожу (при компиляции) в Эдит имя директории и нажимаю Ентер. Но комп бимкает. Чего-то не хватает? (Не бейте только за дебилизм, я с Дельфи пару дней назад познакомился) |