Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделить строку файла на переменные... 
:(
    Опции темы
TrippDian
Дата 17.11.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



У меня есть файл, к примеру temp.txt, в нем изначально не извесно сколько строк. Предпоследнюю строку мне нужно прочитать, она вот такого вида - "2006-11-17;17:51:30;-1,0" (без кавычек строка естественно). Мне нужно дату из строки (2006-11-17) присвоить переменной day, время(17:51:30) присвоить переменной curtime,  -1 присвоить переменной temp, и 0 присвоить переменной full.
PM MAIL   Вверх
Sunvas
Дата 17.11.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Ну, дык, сначала прочитай этот текст в стринг, а потом шамань над ним и разделяй на другие переменные. В чем трудность-то??

Это сообщение отредактировал(а) Sunvas - 17.11.2006, 14:15


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Matematik
Дата 17.11.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



В чем затруднение?
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 17.11.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Вообще для преобразования в дату и время можно воспользоваться StrToDate и StrToTime.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 17.11.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вот такая процедура получается для парсинга твоей строки
Код

procedure Parse(line:string; var day: TDateTime; var temp: Integer; var full: integer);
var
  ts:  char;
  tsd: string;
  i:   Integer;
begin
  ts := DateSeparator; tsd := ShortDateFormat;
  DateSeparator := '-'; ShortDateFormat := 'yyyy-mm-dd';
  i := Pos(';', line); if i = 0 then i := Length(line);
  day := StrToDateDef(Copy(line, 1, i-1), 0); Delete(line, 1, i);
  i := Pos(';', line); if i = 0 then i := Length(line);
  day := day + StrToTimeDef(Copy(line, 1, i-1), 0); Delete(line, 1, i);
  i := Pos(',', line); if i = 0 then i := Length(line);
  temp := StrToIntDef(Copy(line, 1, i-1), 0); Delete(line, 1, i);
  full := StrToIntDef(line, 0); Delete(line, 1, i);
  DateSeparator := ts; ShortDateFormat := tsd;
end;


А вот пример её работы
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  day: TDateTime;
  temp, full: Integer;
begin
  Parse('2006-11-17;17:51:30;-1,0', day, temp, full);
  ShowMessage(DateTimeToStr(day) + #13 + IntToStr(temp) + #13 + IntToStr(full));
end;
P.S. код не зависит от региональных настроек машины smile

Добавлено @ 15:22 
P.P.S. Я не стал дробить дату и время на 2 переменные, т.к. в TDateTime хранится и то и другое.

Добавлено @ 15:24 
P.P.P.S. Файл большой?
Если нет, то грузи его в стринглист и бери предпоследнюю строку.
Если десятки и более мегабайт, то могу набросать ещё и код,который читает не весь файл, а только хвост.
PM MAIL   Вверх
TrippDian
Дата 17.11.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Snowy огромный респект тебе за помощь! Файл маленький, меняется динамически и там практически всегда порядком 10-12 строк. А как через стринглист последнюю строчку взять ? smile
PM MAIL   Вверх
Elfebet
Дата 17.11.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 2
Всего: 14



Код

var list:TStringList;
begin
 list:=TStringList.Create;
 list.loadfromfile('you file');
 Showmessage(list.Strings[list.Count-1]);
 list.free;
end;




--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
Snowy
Дата 17.11.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Только list[list.Count-2] smile
PM MAIL   Вверх
NaumLeNet
Дата 18.11.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 10.12.2005

Репутация: нет
Всего: нет



Цитата(Snowy @ 17.11.2006,  16:05)
Только list[list.Count-2] smile

почему -2? )) последняя строка будет именно 
Код

last := list[list.count - 1];

PM MAIL ICQ   Вверх
Snowy
Дата 18.11.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(NaumLeNet @  18.11.2006,  09:11 Найти цитируемый пост)
почему -2? )) последняя строка будет именно 
Ой. Я прочитал, что нужна предпоследняя.
И как умудрился...

Цитата(TrippDian @  18.11.2006,  08:07 Найти цитируемый пост)
как мне из это строки сделать число, предварительно округлив его ?

Простой случай: 
Код

  i := Round(StrToFloat('-2.2'));


C защитой от различных региональных настроек так:
Код

function FStrToInt(s: string): integer;
var c: char;
begin
  c := DecimalSeparator; DecimalSeparator := '.';
  result := Round(StrToFloatDef(s, 0));
  DecimalSeparator := c;
end;

PM MAIL   Вверх
TrippDian
Дата 18.11.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.10.2006

Репутация: нет
Всего: нет



Огромное спасибо вам за помощь =)
Жалко + к репутации добавить не могу, но за мной должок, 100 постов наберу, добавлю =)))))
PM MAIL   Вверх
cannibale
Дата 29.10.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.10.2008

Репутация: нет
Всего: нет



весь мозг сломал с этими строками.
на PHP все гораздо проще.
но все равно спасибо за пост

Это сообщение отредактировал(а) cannibale - 29.10.2008, 15:07
PM MAIL   Вверх
Poseidon
Дата 30.10.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Snowy @  18.11.2006,  12:12 Найти цитируемый пост)
Ой. Я прочитал, что нужна предпоследняя.
Так и было в первом посте: 
Цитата(TrippDian @  17.11.2006,  14:04 Найти цитируемый пост)
Предпоследнюю строку мне нужно прочитать

а потом все вдруг переколбасилось 
Цитата(TrippDian @  17.11.2006,  15:35 Найти цитируемый пост)
А как через стринглист последнюю строчку взять ?

 smile 



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
jsa
Дата 30.10.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Цитата(cannibale @  29.10.2008,  20:06 Найти цитируемый пост)
весь мозг сломал с этими строками.на PHP все гораздо проще.

никто не отменял regexp в delphi


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
aktuba
Дата 30.10.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Цитата(cannibale @  29.10.2008,  16:06 Найти цитируемый пост)
весь мозг сломал с этими строками.
на PHP все гораздо проще.

За счет регулярок? Так тут тоже есть ;) А еще в Delphi куча полезных инструментов для строк, например, тот-же TStringList.


--------------------
user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0779 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.