Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

fcdobpiy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
RegExpr отличная вещь. использует следующие модули
 Classes,  // TStrings in Split method
 SysUtils; // Exception
 Windows; // CharUpper/Lower
 
несомненный плюс - проще модифицировать, при малейшем изменении формата входной строки. ну и защита от лишних пробелов и т.п.
 
delover
LadyOfWood
Frodo_Torbins
спасибо, счас буду обрабатывать полученые знания )

Всего записей: 411 | Зарегистр. 22-08-2005 | Отправлено: 07:18 27-10-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
all
Глупый вопрос, может быть, конвертировать время будильника, после того как часы были переведены на час, - это дополнительный сервис? (удалено)
 
зы  
теперь без зы

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 08:36 27-10-2008 | Исправлено: delover, 11:58 27-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988

Цитата:
Да мне собственно надо на одном паскале + апи если возможно. Я так понимаю TRegExpr на VCL завязан.

Вы бы для начала хоть заглянули туда, чтоли. Там архив всего 80Кб.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 09:48 27-10-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Вот вариант оптимизации.
 

Код:
 
function GetRouteNameFromString(S : String) : String;
var
  I : Integer;
begin
  I := Pos('(', S);
  if (I > 0) then
    Result := Copy(S, I + 1, Length(S)-1)
  else
    Result := '';
end;
 
function GetRouteAddressFromString(S : String) : String;
var
  I : Integer;
begin
  I := Pos('mask', S);
  if (I = 0) then
    I := Pos('(', S);
  Result := Copy(S, 1, I - 2);
end;
 
function GetRouteMaskFromString(S : String) : String;
var
  I : Integer;
  J : Integer;
begin
  I := Pos('mask', S);
  if (I > 0) then
    I := I + 4;
  J := Pos('(', S);
  Result := Copy(S, I+1, J-I-2);
end;
 

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 10:37 27-10-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добавил зы
http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%84%D0%B0%D0%B3%D0%BE%D1%80

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 12:03 27-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall
В результате функции GetRouteNameFromString должно быть Copy(S, I + 1, Length(S)-I-1), иначе копируется последняя скобка в название маршрута.
Frodo_Torbins
Да у меня чего-то инетрнет тормозил, поэтому я мало по сайту полазил. А так посмотрю что модули там раз такое дело.
fcdobpiy
Да может оно конечно и проще модифицировать, но там SysUtils полновесный, а тут без этой ерунды.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 14:06 27-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А, да, еще вот хотелось бы чтобы кто-нибудь из вас, программистов, помог с кодом. Имеем например строку, которую скачали с сайта - это например полноценный текстовый файл. Так вот необходимо его распарсить и позагонять строчки в массив. Я делал такую фичу через чтение текстового файла, но бывает что диск нагружен всякими торрентами/ослами/качалками и программа иногда подвисает при записи скачанных данных на диск, да еще и всякие заморочки чтобы файл удалять каждый раз чтоб юзер не замечал следов действий. Вобщем сейчас пока так:

Код:
      while not EOF(TextF) do
        begin
          ReadLn(TextF, StrFl);
          ResSt := PChar(@StrFl[1]);
          if not((ResSt = '')) then
            begin
              // Увеличиваем на одно значение параметр числа строк
              Inc(Index);
              // Одновременно заполняем массив с маршрутами из файла
              RouteList[Index] := PChar(ResSt);
            end;
          end;

А хочется сразу через массив без всякой лишней лабуды, тем более это еще и быстрее уж будет. Собственно что-то никак не придумывается сам алгоритм реализации. Ну типа такого:

Код:
for i := 1 to Length(RouteList) - 1 do
begin
Вот тут как-то надо обрабатывать наверное через Pos
Ну или искать символ  #13#10, прерываться и добавлять строку в массив
end;

Только чего-то не знамо как... Может есть у кого какие-нибудь наработки в этой области? Спасибо.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 07:13 28-10-2008
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988, можно попробовать через StringList

Код:
var
  List: TStringList;
 
begin
  List := TStringList.Create;
  List.LoadFromFile(FileName);
  // Доступ к строкам  List.Strings[i]
  List.Free;
end.


----------
www.MyFirstSite.ru - информационный ресурс для начинающих веб-мастеров

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 08:10 28-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar79
Да не, тут надо без сохранеия на диск. Сразу в памяти распарсить на строки, позагоняв их в массив.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 09:07 28-10-2008
Czechoslovak



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Может кто подскажет компонент счетчика в виде "нормального физического счетчика" ну типа как счетчик воды или газа,о есть с циферблатом стрелочным и цифровым?

Всего записей: 175 | Зарегистр. 27-06-2007 | Отправлено: 09:27 28-10-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988

Цитата:
for i := 1 to Length(RouteList) - 1 do
begin
Вот тут как-то надо обрабатывать наверное через Pos
Ну или искать символ  #13#10, прерываться и добавлять строку в массив
end;
 

вместо for лучше while примерно так

Код:
 
i:=0;
RouteList:=RouteList+#10#13;//чтобы точно оканчивалось на перевод строки
while Length(RouteList)>0 do begin
  if Pos(#10#13,RouteList)>1 then begin  //убеждаемся что не пустая строка
     tSt:=Copy(RouteList,1,Pos(#10#13,RouteList)-1);// -1 так как перенос строки нам не нужен
     Inc(i);
     MyArray[i]:=tSt;
   end;
  Delete(RouteList,1,Pos(#10#13,RouteList)+1);
end;
 

писал на коленках, но вроде ошибок нет. Чтобы ускорить можешь ввести переменную куда занести Pos(#10#13,RouteList) а то много раз поиск отрабатывает, при больших строках и частых операциях ускорит обработку.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:34 28-10-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins

Цитата:
Там архив всего 80Кб.

Всего? Ну-ну... Хотя всё одно придётся когда-нибудь осваивать.
А Вы не подскажете как лучше понимать utc? Мне было бы удобнее тупо, т.е. что написано, то и есть. Но может быть это не правильно? Функции смотрел, но пока от себя не добавлял.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 11:10 28-10-2008
Jokerjar79



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988, если у тебя имеется какой-либо многострочный текст, к примеру, в переменной txt, то через тот же StringList можно сделать так

Код:
var  
  List: TStringList;  
 
begin  
  List := TStringList.Create;  
  List.Text := txt;
  // Доступ к строкам как к элементам массива:  List.Strings[0],  List.Strings[1], ...  
  List.Free;  
end.


----------
www.MyFirstSite.ru - информационный ресурс для начинающих веб-мастеров

Всего записей: 710 | Зарегистр. 08-09-2007 | Отправлено: 14:56 28-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover

Цитата:
Всего? Ну-ну...
- там хелп довольно объемный полюс демки.

Цитата:
utc
- с этим к сожалению не знаком.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 15:45 28-10-2008
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
А готовые к использованию приложения можно посмотреть? Где и как это использовано.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 16:11 28-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jokerjar79
Мне б еще без VCL мусора просто. СтрингЛист я смотрю активно использует SysUtils, а вырезать код задолбаешься для стринглиста...
ShIvADeSt
Чего-то нифига не работает... Крутил и так и сяк, даже пытался индекс выводить - а то просто пустой массив был я хотел узнать индекс хоть увеличивается или нет в цикле. Доигрался до того что система в синий экран выпала...
И RouteList вы наверное пиняли за строку, хотя на самом деле это массив строк.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 20:12 28-10-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
В SynEdit-е используется.
Maks150988
Тогда вырежте функцию TStrings.SetTextStr.

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 20:27 28-10-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988

Цитата:
Чего-то нифига не работает... Крутил и так и сяк, даже пытался индекс выводить - а то просто пустой массив был я хотел узнать индекс хоть увеличивается или нет в цикле. Доигрался до того что система в синий экран выпала...
И RouteList вы наверное пиняли за строку, хотя на самом деле это массив строк.

О блин, просто я читал вот это

Цитата:
Имеем например строку, которую скачали с сайта - это например полноценный текстовый файл. Так вот необходимо его распарсить и позагонять строчки в массив

поэтому естессно предположил, что RouteList - это именно та строка которую вы скачали. Для нее я и писал парсер. Если это массив - то нафига еще парсить? Уточни плиз

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:01 29-10-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt
Ну значит
 
Index : Integer; // Индекс числа строк в массиве.
RouteList : Array of String; // Массив строк с маршрутами
S : String; // Строка с данными с сервера
 
Необходимо распарсить S на нахождение #13#10...
// Потом через for Index := 1 to Index do начинаю запонять ListView строками из массива RouteList.

 
Добавлено:
ShIvADeSt
Ну значит
 
Index : Integer; // Индекс числа строк в массиве.
RouteList : Array of String; // Массив строк с маршрутами
S : String; // Строка с данными с сервера
 
Необходимо распарсить S на нахождение #13#10...
// Потом через for Index := 1 to Index do начинаю запонять ListView строками из массива RouteList.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 08:03 29-10-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988

Цитата:
 
Index : Integer; // Индекс числа строк в массиве.
RouteList : Array of String; // Массив строк с маршрутами
S : String; // Строка с данными с сервера  

в моем примере замени
i на Index
RouteList на S
а MyArray на RouteList
и получишь парсер

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 09:00 29-10-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru