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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2015, 21:27   #11
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
var TS:Tstringlist;
s:string;
ok:boolean;
i:longint;
begin


s:='';
ok:=false;
showmessage('Введите в TEdit образец искомой строки');

s:=trim(edit1.text);
if (s=='') exit;

TS:=TstringList.create();
ts.loadfromfile('c:\...');

for i:=0 to ts.count-1 do
  if pos(s,ts[i])==1
  begin
  ok:=true;
   //действия
  end;

if (!ok) showmessage('Записей не найдено');

ts.free;
end;
С потолка
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 16.09.2015, 21:35   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Угу, это уж точно все чистое winapi
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.09.2015, 21:38   #13
HTTqp
Форумчанин
 
Регистрация: 20.12.2013
Сообщений: 164
По умолчанию

Tstringlist; все портит


Все пытаюсь оптмизировать код:

Код:
var s,s2:ansistring;
      h:THandle; z,i,b,e:Cardinal;
begin
 h:=CreateFile('d:\1\q.txt', GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
 if h=0 then exit;
 z:=GetFileSize(h,@i);
 SetLength(s,z);
 ReadFile(h, s[1], Length(s), i, nil);
 //CloseHandle(h);
 b:=1;
 while b<>0 do begin
   b:=pos(#13#10,s); s2:=copy(s,1,b); delete(s,1,b+1);
   s2:=StringReplace(s2,' ','',[rfReplaceAll]);
 end;
 SetLength(s,0);
end;
Но начинаю работать с s2 и программа виснет намертво, помоги кому не сложно после завтра уже показывать, а я тут застрял(
HTTqp вне форума Ответить с цитированием
Старый 16.09.2015, 21:41   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
завтра уже показывать
Спалишься )
Тут из винапишки только чтение файла. А парсить на винапи кто будет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.09.2015, 21:46   #15
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Stilet
Цитата:
завтра уже показывать
"После завтра" ж )
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.09.2015, 05:38   #16
VladWH
 
Аватар для VladWH
 
Регистрация: 24.08.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от HTTqp Посмотреть сообщение
помоги кому не сложно после завтра уже показывать, а я тут застрял(
вот полностью на WinAPI окно, элементы и парсинг
Код:
program WATP;

uses
  Windows,
  Messages;

function PathRemoveFileSpecA(pszPath: PAnsiChar): BOOL;
                                     stdcall; external 'shlwapi.dll';
function StrStrA( const str1, str2: PAnsiChar): LPTSTR;
                                     stdcall; external 'shlwapi.dll';

{$APPTYPE GUI}

var
  hWindow     : HWND;
  WndClass    : TWndClass;
  msgMessage  : TMSG;
  Edit        : HWND;
  Button      : HWND;
  ResEdit     : HWND;
const
  sClassName = 'TXTParsing';
  EditID     = 1;
  ButtonID   = 2;
  ResEditID  = 3;

function GetModuleDirectory: string;
var  Path: array [0..255] of char;
begin
 GetModuleFileName(0, @Path, MAX_PATH);
 PathRemoveFileSpecA(Path);
 result:=Path;
end;

procedure ButtonClick;
var s,s2,url,txt:ansistring; l,l2: integer;
begin
 l := GetWindowTextLength( Edit );
 SetLength(s,l);
 GetWindowText( Edit, PAnsiChar(s), l );
 txt := 'Результат парсинга';
 repeat
  s2 := StrStrA(PAnsiChar(s),'"');
  if s2='' then Break;
  lstrcpyn(@s[1], @s2[2], lstrlen(PAnsiChar(s2)));
  s2 := StrStrA(PAnsiChar(s),'"');
  l2 := lstrlen(PAnsiChar(s))-lstrlen(PAnsiChar(s2));
  SetLength(url, l2+1);
  lstrcpyn(@url[1], @s[1], l2+1);
  if url<>'' then
    begin
     SetLength(txt, lstrlen(PAnsiChar(txt))+lstrlen(PAnsiChar(#13#10+url)));
     lstrcatA(@txt[1], PAnsiChar(#13#10+url));
    end;
  lstrcpyn(@s[1], @s2[2], lstrlen(PAnsiChar(s2)));
 until (url='') or (s2='') or (s='');
SetWindowText( ResEdit, PAnsiChar( txt ) );
end;

procedure LoadFromFile;
var FH: THandle;
FS,FHS: Cardinal;
Str: AnsiString;
begin
FH := CreateFile(PAnsiChar(GetModuleDirectory + '\q.txt'),
                 GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
if FH=0 then
 begin
  MessageBox(hWindow, 'Ошибка файла!', '', 0);
  PostQuitMessage(0);
 end;
FS := GetFileSize(FH,@FHS);
SetLength( Str, FS );
ReadFile(FH, Str[1], Length( Str ), FHS, nil);
SetWindowText( Edit, PAnsiChar( Str ) );
CloseHandle(FH);
end;

function ParsWndProc(Window: HWnd; AMessage, WParam,
                          LParam: Longint): Longint; stdcall; export;
var
  AMsg        : TMessage;
  hdcHDC      : HDC;
  PaintStruct : TPaintStruct;
  Rect        : TRect;
begin
  AMsg.Msg := AMessage;
  AMsg.WParam := WParam;
  AMsg.LParam := LParam;
  AMsg.Result := 0;
  case AMessage of
    WM_PAINT   :  begin
                    hdcHDC := BeginPaint(Window,PaintStruct);
                    GetClientRect(Window,Rect);
                    EndPaint(Window,PaintStruct);
                  end;
    WM_DESTROY :  PostQuitMessage(0);
    WM_COMMAND: begin
                 case LoWord( wParam ) of
                  ButtonID: ButtonClick;
                 end;
                end;
  else ParsWndProc := DefWindowProc(Window, AMessage, WParam, LParam);
    Exit;
  end;
  Result := AMsg.Result
end;

procedure CreateParsWnd;
begin
 WndClass.style := CS_HREDRAW or CS_VREDRAW;
 WndClass.lpfnWndProc := @ParsWndProc;
 WndClass.cbClsExtra := 0;
 WndClass.cbWndExtra := 0;
 WndClass.hInstance  := hInstance;
 WndClass.hIcon      := LoadIcon(0,IDI_APPLICATION);
 WndClass.hCursor    := LoadCursor(0,IDC_ARROW);
 WndClass.hbrBackground := HBRUSH(GetStockObject(LTGRAY_BRUSH));
 WndClass.lpszMenuName := nil;
 WndClass.lpszClassName := sClassName;
 if RegisterClass(WndClass) <> 0 then
   begin
    hWindow := CreateWindow(sClassName, 'Парсинг txt (WINAPI)',
                            WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT,CW_USEDEFAULT,
                            640,480,
                            0,0,hInstance,nil);
    // Создаем текстовое поле для начальных данных
    Edit := CreateWindowEx( WS_EX_CLIENTEDGE, 'Edit', '',
     ES_AUTOHSCROLL or WS_CHILD or WS_VISIBLE or ES_MULTILINE,
     10, 10, 610, 200, hWindow, EditID, hInstance, nil );
    // загружаем текст из файла
    LoadFromFile;
    // Создаем кнопку
    Button := CreateWindow('button', 'Парсинг текста',
     WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON,
     10, 215, 610, 30, hWindow, ButtonID, hInstance, nil);
    // Создаем текстовое поле для результатов парсинга
    ResEdit := CreateWindowEx( WS_EX_CLIENTEDGE, 'Edit', '',
     ES_AUTOHSCROLL or WS_CHILD or WS_VISIBLE or ES_MULTILINE,
     10, 250, 610, 200, hWindow, ResEditID, hInstance, nil );
    if  hWindow <> 0 then
     begin
       ShowWindow(hWindow, CmdShow);
       UpdateWindow(hWindow);
       while GetMessage(msgMessage,0,0,0) do
        begin
         TranslateMessage(msgMessage);
         DispatchMessage(msgMessage);
        end;
       Halt(msgMessage.wParam);
     end else MessageBox(0,'Cannot create window','Error',MB_OK);
  end else MessageBox(0,'Cannot register class','Error',MB_OK);
end;

begin
 CreateParsWnd;
end.

Последний раз редактировалось VladWH; 17.09.2015 в 05:43.
VladWH вне форума Ответить с цитированием
Старый 17.09.2015, 09:03   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
SetLength( Str, FS );
Эх препод придерется
Я бы придрался.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2015, 11:45   #18
VladWH
 
Аватар для VladWH
 
Регистрация: 24.08.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Эх препод придерется
Я бы придрался.
ну тогда так
Код:
Str: PCHAR; 
Len: Integer;
................
GetMem( Str, Len );
...........................
FreeMem( Str );
VladWH вне форума Ответить с цитированием
Старый 17.09.2015, 12:29   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ну тогда так
Тоже паскаль
А нужно Винапи !
Садись - два, завтра с родителями в школу
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2015, 17:44   #20
VladWH
 
Аватар для VladWH
 
Регистрация: 24.08.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Тоже паскаль
А нужно Винапи !
Садись - два, завтра с родителями в школу
нужно ТС и преподавателю...
Код:
procedure LoadFromFile;
var FH: THandle;
FS,FHS: Cardinal;
Str: AnsiString;
begin
FH := CreateFile(PAnsiChar(GetModuleDirectory + '\q.txt'),
                 GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
if FH=0 then
 begin
  MessageBox(hWindow, 'Îøèáêà ôàéëà!', '', 0);
  PostQuitMessage(0);
 end;
FS := GetFileSize(FH,@FHS);
Str := string(GetMemory(FS));
ReadFile(FH, Str[1], Length( Str ), FHS, nil);
SetWindowText( Edit, @Str[1] );
CloseHandle(FH);
FreeMemory(@str);
end;
VladWH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг данных *.txt Shouldercannon Общие вопросы Delphi 10 04.01.2017 22:44
Переделавание кода на считывание из файла в файл output.txt input.txt !!! airesjke Помощь студентам 0 29.05.2013 14:07
парсинг txt: это возможно? bambarbia Общие вопросы C/C++ 20 11.02.2013 18:16
Парсинг txt с разделителями табуляцией AlexKhol Общие вопросы Delphi 16 18.03.2012 18:33
WinAPI vs MSDN (парсинг командной строки) ds.Dante Win Api 5 03.03.2012 08:41