Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2009, 17:37   #1
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию вывод информации из файла

Здравствуйте Уважаемое сообщество. У меня такая проблема, Нужно из текстового файла вывести все временные метки и вещественные цыфры
Я использую такой код
Код:
procedure TForm1.Button1Click(Sender: TObject);

var SourceST,DestST:TStringList;
    i:integer;
    s:string;
    s1:string;
    s2:extended;
begin
 SourceST:=TStringList.Create;
 DestST:=TStringList.Create;
 if form1.OpenDialog1.Execute then SourceST.LoadFromFile(form1.OpenDialog1.FileName);
 for i:=0 to SourceST.Count-1 do
 begin
  s:=Copy(SourceST[i],Length(SourceST[i])-6,7);
  s1:=Copy(SourceST[i],Length(SourceST[i])-21,11);
  try
    s2:=strtofloat(s1);
    DestST.Add(floattostr(s2)); // Вывод чисел
  except
  end;
  try
    strtotime(s);
    DestST.Add(SourceST[i]);   // Вывод временных меток
  except
  end;

 end;
 DestST.SaveToFile('112.txt'); //   DestST.SaveToFile('112.xls');
 SourceST.Free;
 DestST.Free;
end;
Временные метки выводятся а вот вещественные цыфры выводятся не все, почему, может связано с этой строкой
Код:
s1:=Copy(SourceST[i],Length(SourceST[i])-21,11);
Какие поставить значения.
Информация должна выводится из такого текстового файлаhttp://files.mail.ru/KMVYFB
-Юг-О --АL--АL-г 23/01/2009 15:40:21

=================================== ====================
| -=АА--КL | -ё---г--КL -=АА--КL | -=L-¦¬БгLЛ-КL -=АА--КL |
| Ю=АЕ-г--гЮ | Ю=АЕ-г, Б---/Г=А | Ю=АЕ-г, Б--- |
|-------------|---------------------|------------------------|
| -Б=¦ L-- N1 | 80.0 | 69989.4 |
| -Б=¦ L-- N2 | 0.0 | 571833.8 |
| -Б=¦ L-- N3 | 0.0 | 167899.1 |
| -Б=¦ L-- + | 0.0 | 32586.9 |
| ¦?- N1 | 0.0 | 10585.1 |
| ¦?- + | 30.5 | 158009.1 |
| ?Б=- N1 | 0.0 | 0.0 |
| ?Б=- N2 | 0.0 | 0.0 |
| ?Б=- + | 0.0 | 0.0 |
|------------------------------------------------------------|
| ¦L-Б- -+ | 0.8001 |
| ¦L-Б- ¦?- | 0.5980 |
| ¦L-Б- ?Б=- | 0.0000 |
=================================== =====================
-Юг-О --АL--АL-г 23/01/2009 15:40:24

=================================== =====================
| -=АА--КL | -ё---г--КL -=АА--КL | -=L-¦¬БгLЛ-КL -=АА--КL |
| Ю=АЕ-г--гЮ | Ю=АЕ-г, Б---/Г=А | Ю=АЕ-г, Б--- |
|-------------|---------------------|------------------------|
| -Б=¦ L-- N1 | 80.0 | 69989.4 |
| -Б=¦ L-- N2 | 0.0 | 571833.8 |
| -Б=¦ L-- N3 | 0.0 | 167899.1 |
| -Б=¦ L-- + | 0.0 | 32586.9 |
| ¦?- N1 | 0.0 | 10585.1 |
| ¦?- + | 30.5 | 158009.1 |
| ?Б=- N1 | 0.0 | 0.0 |
| ?Б=- N2 | 0.0 | 0.0 |
| ?Б=- + | 0.0 | 0.0 |
|------------------------------------------------------------|
| ¦L-Б- -+ | 0.8001 |
| ¦L-Б- ¦?- | 0.5980 |
| ¦L-Б- ?Б=- | 0.0000 |
=================================== =====================

Последний раз редактировалось pautina; 25.01.2009 в 17:41.
pautina вне форума Ответить с цитированием
Старый 25.01.2009, 18:03   #2
QunneD
C++ & PHP & Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

http://programmersforum.ru/showthread.php?t=36767
QunneD вне форума Ответить с цитированием
Старый 25.01.2009, 18:44   #3
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию

Да я знаю что это уже 2-ая тема, мне нужно найти решение, хотел получить совет, сам я как только ни пробовал, нужна Ваша професиональная помощь. Почему не выводятся все цыфры, код приведён выше,

Последний раз редактировалось pautina; 25.01.2009 в 18:47.
pautina вне форума Ответить с цитированием
Старый 25.01.2009, 18:57   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Нужно из текстового файла вывести все временные метки и вещественные цыфры
Цифры... Ну, да ладно...
А если сформировать вначале нужный вид? В каком-нибудь невидимом листбоксе? (Почему я довольно часто рекомендую листбокс - просто это один из приемов быстрой отладки программы - сразу все видно, пока Visible:=True... Потом можно просто сделать Visible:=False или поизвращаться со Strings).
Ошибку можно будет исправлять в визуальном режиме - это ведь удобней?

Последний раз редактировалось mihali4; 25.01.2009 в 19:13.
mihali4 вне форума Ответить с цитированием
Старый 25.01.2009, 19:10   #5
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию

Как в этом коде мне поизвращатся над string, что изменить
Код:
procedure TForm1.Button1Click(Sender: TObject);

var SourceST,DestST:TStringList;
    i:integer;
    s:string;
    s1:string;
    s2:extended;
begin
 SourceST:=TStringList.Create;
 DestST:=TStringList.Create;
 if form1.OpenDialog1.Execute then SourceST.LoadFromFile(form1.OpenDialog1.FileName);
 for i:=0 to SourceST.Count-1 do
 begin
  s:=Copy(SourceST[i],Length(SourceST[i])-6,7);
  s1:=Copy(SourceST[i],Length(SourceST[i])-21,11);
  try
    s2:=strtofloat(s1);
    DestST.Add(floattostr(s2)); // Вывод чисел
  except
  end;
  try
    strtotime(s);
    DestST.Add(SourceST[i]);   // Вывод временных меток
  except
  end;

 end;
 DestST.SaveToFile('112.txt'); //   DestST.SaveToFile('112.xls');
 SourceST.Free;
 DestST.Free;
end;
pautina вне форума Ответить с цитированием
Старый 25.01.2009, 19:20   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Очень "понятно"...
Вы не могли бы привести хотя бы строку выходного файла в том виде, который вам надобен?
Что-то меня сомнения берут, что вам нужен отдельно файл с перечислением временных меток и отдельно - файл с показаниями...
Кстати, в том виде, как вы привели исходные данные, там весьма трудно что-либо понять, окромя цифирей...
Может, у вас кодировка не та? Посмотрите сами на ваш первый пост...
Или под "временными метками" подразумеваются значения, предшествующие значениям с плавающей точкой?
Но там и строки из разного количества данных (если принять за разделитель вертикальную черту).
Или это - то, что у вас получается?
Конкретизируйте, пожалуйста, что у вас есть и что нужно получить. Пока вы это сформулировали весьма смутно.

Последний раз редактировалось mihali4; 25.01.2009 в 19:25.
mihali4 вне форума Ответить с цитированием
Старый 25.01.2009, 19:29   #7
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию

на входе такой текстовый файл
-Юг-О --АL--АL-г 23/01/2009 15:40:21
=================================== ===========================
| -=АА--КL | -ё---г--КL -=АА--КL | -=L-¦¬БгLЛ-КL -=АА--КL |
| Ю=АЕ-г--гЮ | Ю=АЕ-г, Б---/Г=А | Ю=АЕ-г, Б--- |
|-------------|---------------------|------------------------|
| -Б=¦ L-- N1 | 80.0 | 69989.4 |
| -Б=¦ L-- N2 | 0.0 | 571833.8 |
| -Б=¦ L-- N3 | 0.0 | 167899.1 |
| -Б=¦ L-- + | 0.0 | 32586.9 |
| ¦?- N1 | 0.0 | 10585.1 |
| ¦?- + | 30.5 | 158009.1 |
| ?Б=- N1 | 0.0 | 0.0 |
| ?Б=- N2 | 0.0 | 0.0 |
| ?Б=- + | 0.0 | 0.0 |
|------------------------------------------------------------|
| ¦L-Б- -+ | 0.8001 |
| ¦L-Б- ¦?- | 0.5980 |
| ¦L-Б- ?Б=- | 0.0000 |
=================================== ===========================
...
...

После применеия программы я должен на выходе получить
23/01/2009 15:40:21
80.0 69989.4
0.0 571833.8
0.0 167899.1
0.0 32586.9
0.0 10585.1
30.5 158009.1
0.0 0.0
0.0 0.0
0.0 0.0

0.8001
0.5980
0.0000
А я получаю только временные метки, цыфры не выводятся, (если нужно поменять кодировку как это сделать, хотя даже без кодировки временные метки и цыфры нужными символами выводятся)
-Юг-О --АL--АL-г 23/01/2009 15:40:21 - это то что выходит сейчас
То что на входе можете посмотреть по адресу http://files.mail.ru/KMVYFB
Что посоветуете?

Последний раз редактировалось pautina; 25.01.2009 в 19:50.
pautina вне форума Ответить с цитированием
Старый 25.01.2009, 19:50   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Давайте попробуем так.
Есть такая функция POS и ее "сестричка" POSEX (уверен, что вы с ними прекрасно знакомы, я просто обосновываю предложение своей "методы").
При помощи второй можно посчитать общее количество разделителей в строке, верно?
Если оно равно 5 - берем данные после третьего разделителя (а ведь именно его позицию в строке нам и дает POSEX), и выбираем все символы до следующего разделителя (тривиальная задача, вы с ней прекрасно знакомы).
Ну, а если оно равно 4, то берем данные после второго разделителя...
Все это "зафигачиваем" в листбокс, смотрим - правильно ли получилось, и если правильно - жмем пимпу и записываем в файл ( вы тоже это прекрасно знаете - ListBox1.Items.SaveToFile()
Вот и все. Увы, по другому вряд ли получится - нужна предварительная обработка исходных данных - формат-то разный в разных строках...
mihali4 вне форума Ответить с цитированием
Старый 25.01.2009, 19:58   #9
pautina
Пользователь
 
Регистрация: 23.01.2009
Сообщений: 32
По умолчанию

Количество разделителей в одном месте 4 в другом 3 нам нужно взять данные после 2-го разделителя.
Код:
pos('|',sourseST[i]);
 if position !=0 then
{ строка найдена} else { строка не найдена }
Как при помощи posex подсчитать общее количество разделителей в строке.

Последний раз редактировалось pautina; 25.01.2009 в 20:22.
pautina вне форума Ответить с цитированием
Старый 25.01.2009, 20:39   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Как при помощи posex подсчитать общее количество разделителей в строке.
Боже... Опять...
Хорошо. Мне не лень. Ввводим POSEX, ставим курсор куда-нибудь внутри этого слова и жмем F1. В открывшемся окошке хэлпа все подробнеько, правда по-аглицки... Но программер без "аглицкого" - как инвалид-сапожник без рук...
Так вот - пока находим разделитель - он есть. Не нашли - нету. А посчитать... Не верю, что вы этого не умеете.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод информации о компьютере и операционной системы (Turbo С 3.0, Borland C++) sniket Общие вопросы C/C++ 0 09.12.2008 21:37
вывод на экран информации о маршрутах, начинающихся или кончающихся в пункте Sergeo_89 Паскаль, Turbo Pascal, PascalABC.NET 4 07.12.2008 21:00
Вывод информации в Memo из файла. Фибер Оптик Общие вопросы Delphi 11 04.05.2007 00:13