Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.06.2008, 17:35
double_tooth double_tooth вне форума
Прохожий
 
Регистрация: 25.05.2008
Адрес: СПб
Сообщения: 4
Репутация: 10
Вопрос из текстовых файлов - в программу

Привет! Никак не могу понять, как осуществить сие.

Имеется 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  
Старый 01.06.2008, 20:36
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию

Это еще легкая задача!

пишешь функцию для одной строки, которая возвращает дату и темпиратуру.
копируем строку в переменную 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  
Старый 01.06.2008, 20:49
double_tooth double_tooth вне форума
Прохожий
 
Регистрация: 25.05.2008
Адрес: СПб
Сообщения: 4
Репутация: 10
По умолчанию

спасибо
сейчас попробую разобраться.
Ответить с цитированием
  #4  
Старый 02.06.2008, 16:26
double_tooth double_tooth вне форума
Прохожий
 
Регистрация: 25.05.2008
Адрес: СПб
Сообщения: 4
Репутация: 10
По умолчанию

ладно, сознаюсь...
последний раз имел дело с Паскалем-дельфи 6 лет назад

Но тем не менее не могу вспомнить или найти
простейший пример с работой с текстовым файлом.

То есть для моего примера нужно что?

-подписать переменную типа файл (AssignFile) ?
-открыть его для чтения и записи одновременно?
-стереть из него ненужное
-сделать двумерный массив 2 x 270 (примерно)
-и так 150 раз для разных файлов.

а как зациклить это для файлов внутри одной папки?
имена у них типа 1943, 1944, 1945, 1956......1995. (все с расширением *.txt)
Ответить с цитированием
  #5  
Старый 02.06.2008, 17:01
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию

Я делал нечто похожее не давно, выложу тебе процедурки, а уж прогу собирай сам.

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  
Старый 02.06.2008, 23:45
double_tooth double_tooth вне форума
Прохожий
 
Регистрация: 25.05.2008
Адрес: СПб
Сообщения: 4
Репутация: 10
По умолчанию

Я, конечно, нуб, но
что-то не понимаю насчет первой процедуры.
Я добавил в форму ЛистБокс и Эдит, на который навесил эту самую процедуру (ОнКейПресс)...
И что?
Ничего не происходит.
А что за расширение '*.ss' ?
я может не прав, но я ввожу (при компиляции) в Эдит имя директории и нажимаю Ентер.
Но комп бимкает.
Чего-то не хватает?
(Не бейте только за дебилизм, я с Дельфи пару дней назад познакомился)
Ответить с цитированием
  #7  
Старый 03.06.2008, 09:51
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Цитата:
Сообщение от double_tooth
(Не бейте только за дебилизм, я с Дельфи пару дней назад познакомился)
Вот ваш работающий проект (эскиз).
Вложения
Тип файла: zip TextFiles.zip (4.4 Кбайт, 6 просмотров)
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #8  
Старый 03.06.2008, 10:06
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию

да засунь на кнопку и не парься
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:48.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025