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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка конвертации из string в real. 
V
    Опции темы
asres1
Дата 15.3.2011, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
А они всегда располагаются в файле по порядку их номеров? Или могут быть расположены произвольно? Я не про номер, а про содержание "секции" &sхх.


Внешняя секция  &sхх  вне порядка. Ну это не проблемма. А вот внутренняя часть - трабл. 


PM MAIL   Вверх
Keeper89
Дата 15.3.2011, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вопрос: как в 0.0025.460 отделить что есть первое число, а что второе?


--------------------
PM MAIL WWW   Вверх
northener
Дата 15.3.2011, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(asres1 @  15.3.2011,  01:53 Найти цитируемый пост)
Внешняя секция  &sхх  вне порядка. Ну это не проблемма. А вот внутренняя часть - трабл. 

Так в чём этот трабл?
Берем любую секцию. Например:
&s 2 -90.9312
\ 7
        0.00 8.940 1 
        1.6210.73w 8 
        3.3413.78w 9 
        4.9617.05w10 
        5.6318.60d 1 
        5.8719.17d 1s
        0.0019.170 1 
И в чём проблема?

Добавлено @ 02:10
Цитата(Keeper89 @  15.3.2011,  02:03 Найти цитируемый пост)
Вопрос: как в 0.0025.460 отделить что есть первое число, а что второе?

Там жесткие размеры "подстрок", представляющих значения. Т.е., например Copy( S,n,m) - это та часть строки, которая представляет первое число. Ну и таким же образом  второе и третье и т.д. Но значения n и m пока приходится брать с потолка.
P.S. А ты думал будет легко? smile 

Это сообщение отредактировал(а) northener - 15.3.2011, 02:18


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Keeper89
Дата 15.3.2011, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(northener @  15.3.2011,  02:04 Найти цитируемый пост)
P.S. А ты думал будет легко? 

Да хз, я только могу присоединиться к "гореть в аду" =)

К тому же, если это длины предполагаемых чисел, то уже неверно.

Вот, например, еще:
Цитата

0.1017.05w10

это что? где тут границы? что означает буква и т.д.?

Это сообщение отредактировал(а) Keeper89 - 15.3.2011, 02:22


--------------------
PM MAIL WWW   Вверх
asres1
Дата 15.3.2011, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 
Цитата
Да хз, я только могу присоединиться к "гореть в аду" =) 

 ну если на винграде такое говорят, то представте как мне, новичку в делфе, да и в програмировании. 

 
Цитата
 0.0025.460 


copy(строка,1,4)
copy(строка,5,4) 

Мне сказали делать так. 



&s 2 -90.9312
\ 7                                             <<<< насколько я врубился за эти три дня, трабл в этой хрени. тут читаеться Х[i], а он то пустой
        0.00 8.940 1                   << тут всё норм. 

Это сообщение отредактировал(а) asres1 - 15.3.2011, 02:25
PM MAIL   Вверх
Keeper89
Дата 15.3.2011, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



asres1, что за буква в моем примере выше?

Это сообщение отредактировал(а) Keeper89 - 15.3.2011, 02:27


--------------------
PM MAIL WWW   Вверх
northener
Дата 15.3.2011, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Keeper89 @  15.3.2011,  02:18 Найти цитируемый пост)
К тому же, если это длины предполагаемых чисел, то уже неверно.

Ну не совсем так. 
Старый добрый паскаль, а ныне его потомок Дельфи вполне нормально бы справился с такой задачей. Были бы лишь эти числа в текстовом файле разделены! Пробелом, "табуляцией" или ещё как-нибудь.
Длина "строкового представления числа" не имеет никакого значения. Если она "разумна" конечно.

Добавлено через 4 минуты и 32 секунды
Цитата(asres1 @  15.3.2011,  02:21 Найти цитируемый пост)
\ 7                                             <<<< насколько я врубился за эти три дня, трабл в этой хрени. тут читаеться Х[i]

Не врубился. Тут читается количество точек в данной "секции" &s 2 -90.9312.

Добавлено через 7 минут и 34 секунды
Цитата(Keeper89 @  15.3.2011,  02:18 Найти цитируемый пост)
что означает буква и т.д.?

Пока это можно отложить в сторону. Это пусть заинтересует автора в будущем. Она (эта буква) находится за границей чисел, заданных n,m.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Keeper89
Дата 15.3.2011, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Пока могу предложить такой вариант:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TDoubleArray = array of Double;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function MatrixToString(A: TDoubleArray): string;
var
  i: Integer;
begin
  with TStringBuilder.Create do
    try
      for i := Low(A) to High(A) do
      begin
        AppendFormat('%d) %3.2f', [i + 1, A[i]]);
        if i <> System.Length(A) then
          Append(sLineBreak);
      end;
      Result := ToString;
    finally
      Free;
    end;
end;

function ClearedString(const AStr: string; ALimit: Integer): string;
var
  i: Integer;
begin
  with TStringBuilder.Create do
    try
      for i := 1 to System.Length(AStr) do
        if not CharInSet(AStr[i], [' ', 'w', 'b']) then
        begin
          Append(AStr[i]);
          if Length = ALimit then
            Break;
        end;
      Result := ToString;
    finally
      Free;
    end;
end;

function GetFileInfo: Boolean;
const
  START_MARK = '&s24';
  END_MARK = '&s25';
  MAX_LENGTH = 8; // кол-во символом на 2 числа
var
  StartPos, EndPos, i, LengMas: Integer;
  AppPath: string;
  X, Y: TDoubleArray;
begin
  AppPath := ExtractFilePath(ParamStr(0));
  with TStringList.Create do
    try
      // 1) Получаем искомый фрагмент
      LoadFromFile(AppPath + '17000.txt');
      StartPos := Pos(START_MARK, Text);
      EndPos := Pos(END_MARK, Text);
      Text := Trim(Copy(Text, StartPos, EndPos - StartPos));
      Delete(0); // удаляем первую строку с индексом

      // 2) Получаем первое число
      if not TryStrToInt(Copy(Strings[0], 2, Length(Strings[0])), LengMas) then
        ShowMessage('Первое число не получено!');

      // 3) Получаем остальные числа
      SetLength(X, Count - 1);
      SetLength(Y, Count - 1);
      for i := 1 to Count - 1 do
      begin
        Strings[i] := ClearedString(Strings[i], MAX_LENGTH);
        DecimalSeparator := '.';
        if not TryStrToFloat(Copy(Strings[i], 1, 4), X[i-1]) or
          not TryStrToFloat(Copy(Strings[i], 5, 4), Y[i-1]) then
          ShowMessage('Не преобразована строка ' + IntToStr(i));
      end;
      ShowMessage(MatrixToString(X));
      ShowMessage(MatrixToString(Y));
    finally
      Free;
    end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  GetFileInfo();
end;

end.




--------------------
PM MAIL WWW   Вверх
northener
Дата 15.3.2011, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Keeper89 @  15.3.2011,  03:09 Найти цитируемый пост)
Пока могу предложить такой вариант:

Не "врубился в тему".


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Keeper89
Дата 15.3.2011, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(northener @  15.3.2011,  03:17 Найти цитируемый пост)
Не "врубился в тему". 

Ну я допускаю что мог что-то не понять =)


--------------------
PM MAIL WWW   Вверх
asres1
Дата 15.3.2011, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
Добавлено @ 02:34
Цитата(asres1 @  15.3.2011,  02:21 Найти цитируемый пост)
\ 7                                             <<<< насколько я врубился за эти три дня, трабл в этой хрени. тут читаеться Х[i]

Не врубился. Тут читается количество точек в данной "секции" &s 2 -90.9312.


то что вы написали, это масcив x[i], после "\" количество точек.

Цитата
Добавлено @ 02:37
Цитата(Keeper89 @  15.3.2011,  02:18 Найти цитируемый пост)
что означает буква и т.д.?

Пока это можно отложить в сторону. Это пусть заинтересует автора в будущем. Она (эта буква) находится за границей чисел, заданных n,m. 


да, это мне не надо. 




Keeper89, спасибо за прогу! Буду розбираться! отпишусь завтра! 




Это сообщение отредактировал(а) asres1 - 15.3.2011, 19:37
PM MAIL   Вверх
northener
Дата 16.3.2011, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(asres1 @  15.3.2011,  19:35 Найти цитируемый пост)
то что вы написали, это масcив x[i], после "\" количество точек.

Ну да. Это именно количество точек.
Только, похоже, вы ничего пока не поняли.
Будете разбираться с программой от Keeper89, милости просим задавать дополнительные вопросы.
Пока мы ещё добрые smile 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
asres1
Дата 16.3.2011, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
Будете разбираться с программой от Keeper89, милости просим задавать дополнительные вопросы.

ага, спасибо
Их очеееень много. Первый вопрос такой:
 У вас Delphi 2009? Мой ругаеться на всё что только можно. Особенно на TstringList
Пытался всё разом запустит, ругаеться на некоторые и переменные, первые две процедуры (стринглист.криейт ему мешает).

2)  Я так понимаю,  функция ClearedString запускает счётчик до букв w,b  и до пробела? 
Код

function ClearedString(const AStr: string; ALimit: Integer): string;
var
  i: Integer;
begin
  with TStringBuilder.Create do
    try
      for i := 1 to System.Length(AStr) do
        if not CharInSet(AStr[i], [' ', 'w', 'b']) then
        begin
          Append(AStr[i]);
          if Length = ALimit then
            Break;
        end;
      Result := ToString;
    finally
      Free;
    end;


3) Что эта функция делает? забивает строку цифрами( формата стринг) ??
Код

function MatrixToString(A: TDoubleArray): string;
var
  i: Integer;
begin
  with TStringBuilder.Create do
    try
      for i := Low(A) to High(A) do
      begin
        AppendFormat('%d) %3.2f', [i + 1, A[i]]);
        if i <> System.Length(A) then
          Append(sLineBreak);
      end;
      Result := ToString;
    finally
      Free;
    end;


 
Код

if not TryStrToInt(Copy(Strings[0], 2, Length(Strings[0])), LengMas) then

Это я так понимаю, и есть ответ на мой вопрос? 




Код
Пока мы ещё добрые :yes3 

спасибо за терпение.  smile 

Это сообщение отредактировал(а) asres1 - 16.3.2011, 12:09
PM MAIL   Вверх
Keeper89
Дата 16.3.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Единственное, на что он может ругаться - это TStringBuilder. Остальное должно быть в порядке. 

До вечера лучше бы скопировать все ошибки из отладчика в точности как они есть, а там посмотрим.


--------------------
PM MAIL WWW   Вверх
Keeper89
Дата 16.3.2011, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(asres1 @  16.3.2011,  12:02 Найти цитируемый пост)
2)  Я так понимаю,  функция ClearedString запускает счётчик до букв w,b  и до пробела? 

Убирает из строки указанные символы.

Цитата(asres1 @  16.3.2011,  12:02 Найти цитируемый пост)
3) Что эта функция делает? забивает строку цифрами( формата стринг) ??

Выводит массив в строку.

Для версий без СтрингБилдера и CharInSet перевести можно вот так:
Код

function ClearedString(const AStr: string; ALimit: Integer): string;
var
  i: Integer;
begin
  Result := EmptyStr;
  for i := 1 to System.Length(AStr) do
    if not (AStr[1] in [' ', 'w', 'b']) then
    begin
      Result := Result + AStr[i];
      if Length = ALimit then
        Break;
    end;
end;
    
function MatrixToString(A: TDoubleArray): string;
var
  i: Integer;
begin
  Result := EmptyStr;
  for i := Low(A) to High(A) do
  begin
    Result := Result + Format('%d) %3.2f', [i + 1, A[i]]);
    if i <> System.Length(A) then
      Result := Result + #13#10;
end;

Плюс вот картинки того, что получается (на всякий случай, то ли это что нужно):
X:
user posted image
Y:
user posted image

Это сообщение отредактировал(а) Keeper89 - 16.3.2011, 23:39


--------------------
PM MAIL WWW   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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