Delphi- ładowanie długiego tekstu do memo

0

Witam!

Mam problem i postaram sie go opisać.

Posiadam w pliku ini taki fragment:

[1]
Kluczdopobrania=C62DaIKxdvcb4r4MQmjSngNLaXh4ZIHNd9P4gNE3jDVTUr8EpM8I56QNCKLRAJiaSClDvhjbgoj-iGpqbW0ldzxvmBFqkVFh07nPdXj9sxIyFSlwTZjhSb7TzPId7ZerwrwzyDwUXNRgPVofRrbnsokjrPuneKuoVKoTZToaeJTq4BTZXpSZdSWf2sC6kkDx8EPCJQQaCHpkIiA32WUaUss3l9bp-fb4QnhWTqpVNoEsR6eD3YK56PVYnpuyiYmPB-PUxhC-0qJ2IanlyHQ7/DVwh2bd1DryoGkyAUJSOYAh7vwPP6cCQ0t5gnQ1g--02P4ieIeowoZR2GXyZ0iFhlEv7Xp5c40W8fD5uNMMU2o0QI44gsfvc4XJYNjBOw-n9N5543csdNxS0V261peWqtScpGprt7OxVIOe-2Uv456JjxvdhQNTAzTDDNV8Dhw4czsTxDY8tSlmxIhneFGJV9crF1lyjcKlqA5d88Bsw5AiC4YjQgE9YpdnzLaViqHWS-GIilFTQuYQvzzknadf/zLEwQQXICFeLGdDF1-YX1Ok82Spuc-ObXd9zB5Yxnm7MKC2eK-RD8CTooe3FgtOZ-9UF0LAJ7xpadjss0Z82bMxc378qKRrV35MB9ZoRQHmnIIxjpv4CGqkLzhOaFsd6w6oBNQvkGp7XzcPEQJkegLuo-FT/Jzxqan5bXdKuOz/pEVscOLJQ9GUYfPAvxCpUKTy70dY4T43akmrVGV2AU-/QKFkFHNmFGVbnkRMqOFSvc7NNgDEbosY5qwVvhYY8gPIOdZ/lRVhYeo/LgfVi5jn1W/w41OtOxBZQZB6SbJQWxdUyazfxICO4m2YEKYUhsiIMcY9U4kOjDBaSMGse2Ct-qv3bsMDozrRh8Xy/R2BaqDWdeZ7EobLmtHYur5EqPSMP3YDvumOPTE4SxBCa10L9Zyv0/6Hzk5jtb5sTpb/GVtNR4JPcMOBx9cRa1qiLb7UE5QbOtyJwq6EiiHS/SDfezpole1b-gH2CEwPEcJ8AUvtXeWtH-N4cN932tj8H21StAEBqV5NH9fxfderedsca5634340Ecc-q13753xlr5gYzZHpANq266Pv7LqX5-g2zsXNwXGLWCugJJ/FtdtcSM44j9mWbA4VJeQsVk/8zhNLAJILnSvtjZqYhLV/7AltY8mzxbUkLZ3xtBLoE9daGm3WBvUfXOiJDB9o/ByDBqmF5NLrhjLeUPyYji64zsGeStQ1YN6PZo60nGIt0y8JwkNWtbIKHunfpNFXu34sf0SYQo2VPQPcWVu9Y4Q3L9jGRtmcKhVob6g3-xs1nGq99I2tLGrzDoToX4nzPsEcUmlrbjFtULHBWD/tRkKezibbpuB3gLFIW9Y7BMSz4yEaGJ7QhDCJ-Cu8XqckMQv3kbR2pMpUrhet2BQVg41fXPRPAqWpMiBfTfFvxpUWnQDW9JACYnQjSV/WVHCwKat2t2avqflbG2NH6aywBsOewGbYBaw3fn6jpKIY1nWEv4DTebnPhdDfWOQ==|/xxxx:|a||k1AVnQt3kCPf2KALDxxHR90mVBMsQRvOpmxo6HWBtwYEqIEpPd7PM2mEm1GxVyLXr11LPvcfqoJkrmeG4siUuufL47KaCK7PEd0dq0a54hJi5/wxj-bzdGGUxcvGpII/xepbim/udJGzQfpjOrDR-2xZwaTyn8aUN6qjMjyeQXjj3UsTkG0CGrEA/FIWOEFEnFI3En341/CIGHrkEvvtzKkg/0VnzYBuAWihLzXM3sMHzH0Zofd26pdXTUf1rV9cX5BD22LkfRtF1wPcOyOqkGNa-BdXhaSTGy5gmZTj8eU6xngJlqmdp-wUqOlpWeekqLSdhAvle1LT3Sf0oh2MGlsQSw9kviKeJ-5fgfds5gtyEVoYp5HbI2rIrH9VIdmKsQgJYOW2DOYzkHGtQIgkT6i73K7iT8K4nooSFzoPoEqzuA5yY6vryuqixl4yrIzpc6X43t8T/q8kZOnulodxGuSziDXE6IG8RuLE6dd2AVwa-Q0LPzBf7m7FO5RADieW5OQcZPe7UMkmEuud16zAiZ3QG4-0Ws0c7swtWRV5XXRZBDc8bNV1w-BW7LEgRvyqCPmnpI9quqcqRgdq3--QQ0nqps-XhSRMu39SPTghgysvdvCEyWlJmli7MlzdWAXeRdwRNkdCZLUCL/dZmL/LnPY5INz2hJmMmx2Blpa4NUCMKBhyuG4xhdy43yaWDzknUtybXqQ-r1uwBBYp3SbM70VHkKhtdC-5A6RVyyenupMUgJYyOggfKBnGlUiEPqbTQorO-A-KcnI2tYLuO6UyrVsGVHrCcQNK4aiEZxKhwJi8jarxAeJUArwaPs3PelZfNNdCEtCD7EzoOGpQnWoEuHkkKgNNeMq5PXQ3SzULdSmryOgXlCFLR4RZQiUouGwj3qQU05nEs3cClTlIY7BKGVyedGkc3OHwK/nOCeQPuEYYfzhaIyaOVRKEdSIplSWCtiK73PIiw3/rIx4ohjB7pwqiIIN5FDLrXF2gC0UGJdjPO-wFluirDzqhvPR3UTL5MfAcE4MdOg9zf4o6LDU0dYk12mcUvsiY6QsU9sLaNvlVJ03xzlbE5sylulgKKxNgM0E5PGxn8-J81qW0piptGHqTOADC-wvHdMG005jTpICag29tz1JG0aSc9xv12HFndKemuRDyVUxI6s4fIVipffwYNgjFsaEDubobeJ9Qxl8Lcgm8B5MJBbTldUpTyemBqCUPPQCWRt2ejEqn/7gOAi/TPghd4RCtl8THewD153s6bwXNVYBntsAZcxJJJh-JX2aNrOmliH4AOfT5orVFcg-8MSxVnB4wfdxzcdsr9UlaTqMkGA4j-Y95TvWCMe5K6R0JVdjDVLgWlyl0RqXmBu2bW27yztHFQ7bNKrW36w==|/xxxx:|a||6XjHuYcf-lheQbNsVaQYdvHJ3kPsVmM9rD5gAkPWNPq3Gcdb64aComSCBH0HyuHH1HaoGBoFK4Vgk2kG6u3p35/10xWnYicy8nWwlazDwrsNsmteoFtK6Rz5K3CDnIejFLhfGde5QmhQR2AjwfZ5Ny5GXLPNT7rR71rvajXooewKfUUiTf-jvo4FFlH5GKxt2nVdceVCe1M7kf2buko0Bp99q3hAECo-kzrNkxT6QcO/sCl7PvEwmZQzj0/XrFnlBJV01ZVREMr71MepcwQChpVoRF8pVnobknIwpv-8MDfZ5GaPZkClq5tE1QUKj9Sq0KTg1us5XjmBzojIskey6ZIQPgCe3SkksfxDPjjAxZtSuw5QzFpFQLB9xYcD4jkSHJ4MTrBe09G89ADKuajC7mXGIm5z2evuWVEPpv0uqecGo0umAAi-9VkPaGagxBvMsKLZKCbFDwQellLdgvdsvvWRdQbM5piFq/ZJs4fRc/YoqhWTo2XM3mXfGmIuA1XnSqMH9ysLp2ukhRvlNBRMXxl83IK4hZ4ptXMDt3qi4qC3jjEy8pIo0ZRAKgZ9IsE/rz2T9n/EEl8IBVcnLaH9RqJFSG1FSH7O4zHdHzQUPQRaP4wGumU8e0FWCJavtBVvpw73rbr-Bwkakf7u7760UiQgen2onCeE-udoGc0tDiKZNf9OtwBZ6pIPgJXfy86p4Ofcy9pKB2jij3bIZXWZiNrh12nJCTviGerowOOgT0vQ7rDj-jIz7Df8MFfqbs27Wwb40nSwxJqKkspgKzjax/aaZaVdExuukGnN4Q7lM6SCqx9YJ3wo/8Rx9HYSQTznHwlZFOVItXMtHgY6IC9-HDniVAdp4AuvhQKCh/GMwDgZf/aAvAWiVNYBf2xc-jQuadjEgdHLMH/2B1A740lMuLc4XohYY4c2iQurTeCSWvKUKrZPEjCHyCFJVJOy-PrZZvjcAmBz8D4gQNH4m88uFGxH3bLux1zr9RbWqfQTJM/HsqlGPj0L2X7crJk18Mf3vsOGJX8bjhHcQNwpf9YyGvJZWCn5Du6V3d8bIbrRFp1hgX5NslWgAVbAmh9RhvUsjw1dP6JqIuXJqV91cDq67SImtBtxMCoEHs3XvTg5P7XdZq4TDrp8dAKCQt5omfnKxCfNnb4i4GfJn3iqjUPGwAYSRJyamDFnSmxyfuAd-eitvC/dG20oo3FqYeqUP65TyOJAY7na8ZDkAcr1AFlXFyRRF5VE28cWsc/9BjCGxPQrqvmAhomIQvgy0XpKDM5PhVgHkxcsemvbIciDmeynjR/k/wjV415vEgpGeofF-RJs/L7lerQjaOSAaSVh5VbdoijGVEaGPVxUGp8zEiK1y37ncgQhrA9tuzTsw7DRCtU7TIzTn8/9ncnw6ULw96XSEOcHcpE15ROFEECSUUoWcJ9/uwhl49XPjxcP1GvTnV75xz7wTrI4KeK9WGNFSF9-eC0jBVJT1CxggK3YBzQ3hpKQ9LAYQ==|/xxx:|a||JooV9pWxwAexOAJyiKti7v0KCiLwXF2Zf5-ckcI1MkyaJHLmR02Z0N5c1rTNPRcF1k6jrCGY6u4HjmCWuPAYLdWYzkLv5Swwq9W4NYQ2V1ctfxyZr0ymHMQuIg-atpthyY/DnFsTSiCAcBjSQOKbPTJH-coIpzSWxxd0FfT6X0-YvGKdUiIbL7Tg9p1ie0w527nngb0Hii3J6g3JypZKVjh9Bl08HZvKb/qiHqKoWZoW3KM68xrP69f-J26DMvXwEv7UX1PCSLHdQXu87nZrLalHLpSb-E8G2NiZHs5r441LfjFKN0WTtX3Gi/VdlHvvaLyQvWxZ1-KDzbCvGLzld-X6qie5fGnOvv4NhiXjdLtOszt9Kxkx0I4I3JIR70gO9P-9Wf/p0OwKbfDW7oUIhdqSTH8mnGbMs8ojMecQTMOSpBW1LD2dbZONsbZQOuVv0Nvpy9lAD9kb6/Y6U5xYZRcDhW/uLjJk2Quj/fhbZiheAO8p48qsqxUKsygEz231SONvnt-ZbQphAVexT0agIrXMU/dTRjm4RRfilONdiaHbyqL3EcoLGHjrhcYEqI-rFqd6iLOqbkgA/XZXFrjV0rm2teygP4IA/-lXEIkvT1-qFZHOhHeQ5cVFKJ-WgcTiPV8HWT8y6xXQ2QmtCbILftqoQzf-O1rKsE2rPU1gumLgs-BACzgSwgJa4gm6Y2-GpuSUYeLq6E1R6oz-L18GSLOdRhf68ms2pZqWVrrtAtU52AYsG2BPQHw6hYPk8H5R4dbO56Hqsq7sgoROsxKG3DAVoi/wu9/QR1lfeHTQX82B8QE1MymNminCbQov2rjUzTvWOJmvDkQoXtKKhG2JeNtMMwvJ32eELywkru55bbij/yyH0u/G3SRH1I4yCWgecw9gSQdMbnTwNw6uNScunXuz2f9ViKYnMWp7-k3hUkAjFpMN/cyzcb2tRB3yivAwETCb4S8xHIkrbFcx6DIRANJXZpOwiP5tHLwHB0/nuRhR81WXCzOBr/utCNtM1cyqQEAy39eLFPQqz/zmvzn50dFDeM7opx5ucwfufLDUT1768/1TQjnM0N8K7fRC7Z-d4x2GPQXDbEtur0ojbDDYPEe7NMkqsFuY3mD9ZCoNVcfXPRYBiA5HPOJfYAzbkKmROYAEEV88JoLetm2M2F3fgeLlpxzNF0YLbYeLNCDE4xdzPkgE84CUQDL4xJNI2U6SjCyuplMELblbR08PXRkT0oZvGYJumol6S382UxUgHuMVSpkezo7/RV8jRM2QAXcgyty7U1e9CqUD2S6lNO0K1ifoUCxcD0A6Nj-14x2rGdNxA-qX12hGbtj93DZCR5C5UGgZz8YNdx7-1qAYqjuvKcTzAPtMT7u5hjHokUbb/Z62IZk65CxCovapjXssstXXYAEuir1ejU7ZiYx7YNqJOcF/hmw4Ekc8ntXngdBJ41xVbyECWHPNYPnHYbnh8qJytLCuJu76S0I3AMEuw4DbJA==|/xxx:|a||WeAQHu6/7PicViIZffqfJ/cKew8DWPc8iqo4Y1dx/nP1EstADKyNAnv5U/2aZ11lBMgZJSzUtL-bO-fseZDz2Qba2IUJwDscKCURvLf9eKi9XAZntpWAZlsMuW3VYbT3zU7pF1eIJZ9zN5NSuYwMvToV04W0PxKwngxo8i5ktvQpGkgXBwKxx9LGBVB38OMfcM8Kozr-mY/QA3kzQAj6rz07zDxbw-IMgrpL0/VU/gqEcIOTKkPvfHfi23ru8GXOI9HC69pnxAiKpv5GkNljYJQy9METWeV-cZFsJc4VxRUaLqsti4EaFebDL7MinGcRK4YJck8MlVc8kniLKRsmwmIzidfKuW9bPscCPz08TGd1255a8AI1bq9B8WsTMtpkPD36mK-doIfghR2nbMbOc9YEGO4oLTjC6HQsMud7x92pEDi-adPkqQ1-e9XgRhZ3GisTDkTybrqkpkViTrklHU/C0z0w5HbhnvSn655YmfPfE54WQxl3JIgrM27uE3aA8-squ0P7NWymy9zHjJqLG4VIaqgunCP6Ze99XSjKapR3sPlEgUNmIGTbRXEJUVoCdpXAsCi3yom6jCsYUj-IFIfeFJf5jVwW7kh1ANT0HxkfCiNU0lGFkIj6V2KKc-18q1dO1AflOQp6PY0a0u1TJCldcoUxu3aeABg11oGDE-EOycDKZToQ/nyFSE3ufBk6Qa70gnIEfb9V6NNynG-wVm2t/ne89xbWiCsjDpD1wX62gH08jD9cE1E8Vn2arTLyT/WDky95w/8F6Nzey2A9gMspDDHv0A86Ff0aCkUlv9/tSya95f7FQHP-sL4u/gMRNNMAujD-/ISLPWoLasLuGDpop8PxIojTP5ibTBh2C9wipyn8GxNQ/32OFvDglgvpA8VI56SKGcbRw3FC1A0qzjH/RzWGKdC8y8MoICecxu-78iGP8x9VU3LhfSOPpJwfmsNBVfLQJvU5iaXj5IsrTg-NAG10PNwf9qqYE-jPrjaWi3G7ToPcb6y6GMiiXwTC6Tb92NtHS4tXZTv4z8ZKqLUFUP289quopjbkeHnAuCLv4Sd6c0d4nVaFrjMLXl9nJD3zzSKtqxskLm/yElOvLZP0op-JiRQqWQNfPxvZ7pPq7G63XOChbFQjfnGTi5C/lhmhVDSsScqF69pV6ofU/sGXpCdcaYAHy8LN-5EJKy3x2-2u2rJTqniplQAo9dlS5w6sg-ADbQF6PRXQhzl5ZLm9QcpGbaIb-kg1Do0FVXatMHOG8oyk-LAKCJ5YiDHLMFfANJ5rXWKBTmnUSuPd7F1FKbRAOj0xp3ukoqqcVXoPGoB714ZlN44LHv2J7JWGyIIqqoAJwUuJAldqLlv3DX1Mqswzu6j8RJirGfCBZdHMKDNeTp0M2QePaKF0I9mBIBMwNyYnj3b8QYo93NC6qmDy7Bkx3DPoqjmU86uFZbg=|/
[2]
..... itd w nieskonczonosc

jak widać jest on bardzo długi
Próbuje załadować jego wartość np do memo i tu jest problem ponieważ nie ładuje sie nawet 70% tylko zostaje obciety.

kod na ładowanie do memo: memo1.text:=INI.ReadString('1', Kluczdopobrania', 'None');
Przy czym kod:

     
//czytaj
    INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'Dane.ini');
    zawartosc:=INI.ReadString('1', 'Kluczdopobrania', 'None');
    INI.Free;
    //zapisz
    INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'Wybrane.ini');
    INI.WriteString('1', 'Kluczdopobrania', zawartosc);
    INI.Free;

daje ten sam efekt obciecia kodu w tym samym miejscu tzn. w pliku wybrane.ini jest zapisana wartosc do tego momentu co w memo

jak temu zaradzić?
aby załadować w całości do memo i zapisać w niezmienionej formie do drugiego pliku?

//memo ma ustawione oba paski przewijania

dzieki za pomoc

0

Być może Memo głupieje gdy ma zbyt długą linijkę.
Zresztą nie widzę sensu w pokazywaniu tej papki użytkownikowi. Załaduj tekst do zmiennej typu string. Komponenty takie jak Memo nie służą do przechowywania i przetwarzania danych, one są od pobierania danych od użytkownikowi oraz do wyświetlania ich użytkownikowi.

0

Gdybyś z jakichś przyczyn upierał się przy swoim to:

Rozwiązanie a:

memo1.MaxLength := $7FFFFFF0;

Rozwiązanie b:
memo -> richedit
richedit.plaintext := true

0

Kliknij z wciśniętym przyciskiem <ctrl> na słówko ReadString i zobacz jak jest zrobione.
1024 - bajty nie przeskoczysz.
Możesz to czytać "na własną rękę".
Lub poprawić w ReadString - to akurat odradzam, jakiś patch i leżysz nie wiedząc przez co.

0

ee to lipa :/
problem nie lezy w memo tylko w odczycie z pliku
nie ma jakiejs gotowej alternatywy do odczytywania kluczy w postaci key=value z pliku?

ps. program jest tylko dla mnie wiec nie zalezy mi na szybkosci i innych dlatego operuje na memo dlatego, ze tak mi latwiej bo w delphi robie sporadycznie

0

Delphi działa w tym wypadku wystarczająco dobrze, projekt programu masz zrypany.
A w INI trzymaj nazwy plików a nie ich zawartość...

Edit kolejny:
Jak już musisz mieć wszystko w jednym pliku (zdarza się) to użyj XML-a lub JSON-a.

A do podejrzenia pliku użyj RichEdit - jak napisałem wyżej.

0

Function ReadBigIniString(FileName_: string; const Section, Ident, Default: string): string; Var Buffer: array[0..16383] of Char; Begin SetString(Result, Buffer, GetPrivateProfileString(PChar(Section), PChar(Ident), PChar(Default), Buffer, SizeOf(Buffer), PChar(FileName_))); End; // alternative TIniFile.ReadString, with 16 kB buffer instead of 2 kB

znalazłem taką magie ale nie wiem jak to wgrac

nad xml sie zastanowie jednak pacowalem nad tym troche a nie chce mi sie w tej chwili zmieniac

1

Var Buffer: array[0..16383] of Char;

Zomg, widzę że rozwiązania ekspertów od Delphi są magiczne.

Może łatwiej by było napisać własną biblioteczkę do ogarnięcia plików INI która jest napisana bez ograniczeń tego stylu...

0

Spróbuj tak

with StringList.Create do
begin
  LoadFromFile(nazwa_pliku_ini);
  memo1.text:=Values['Kluczdopobrania'];
  Free;
end;
0
filipyoyo napisał(a)

Posiadam w pliku ini taki fragment:

Kluczdopobrania=C62DaIKxdvcb4r4MQmjSngNLaXh4ZIHNd9P4gNE3jDVTUr8EpM8I56QNCKLRAJiaSClDvhjbgoj-iGpqbW0ldzxvmBFqkVFh07nPdXj9sxIyFSlwTZjhSb7TzPId7ZerwrwzyDwUXNRgPVofRrbnsokjrPuneKuoVKoTZToaeJTq4BTZXpSZdSWf2sC6kkDx8EPCJQQaCHpkIiA32WUaUss3l9bp-fb4QnhWTqpVNoEsR6eD3YK56PVYnpuyiYmPB-PUxhC-0qJ2IanlyHQ7/DVwh2bd1DryoGkyAUJSOYAh7vwPP6cCQ0t5gnQ1g--02P4ieIeowoZR2GXyZ0iFhlEv7Xp5c40W8fD5uNMMU2o0QI44gsfvc4XJYNjBOw-

[...]

Rany Boskie... Ty chcesz to użytkownikowi pokazać...? Gdybym korzystał z jakiegokolwiek programu, w którym w memo znalazłaby się taka treść to pierwsze co bym pomyślał to to, że program zadławił się tym plikiem i zwymiotował...

Nie dość, że nie potrafię zrozumieć potrzeby załadowania tak sporej ilości danych do komponentu to jeszcze nie mam pojęcia, jak przeciętny człowiek potrafi zrozumieć ten bajtowy bełkot...? Nawet sam John Nash ugryzłby się w język patrząc na to...

Masz wiele wyjść z tej zagwostki, m.in. zrezygnuj z ładowania treści pliku bezpośrednio do kontrolki na rzecz obiektu klasy TStrings i pokazania tylko interesującej użytkownika części tekstu, zmień typ pliku z INI na zwykły tekstowy lub amorficzny + napisanie prostego parsera; Kontrolki nie służą do przechowywania danych, ale do interakcji z użytkownikiem; Można w nich przedstawić jakieś informacje, ale przetwarzanie ich jest często znacznie wolniejsze, niż operując na strukturach "niewidocznych" dla użytkownika; Inaczej ciężko będzie to ogarnąć;

0

dobra dzieki za odpowiedzi

ale czy ktos może powiedziec jak zapisać do pliku ini tak długi ciąg znaków
bo nie wiem jak zaimplementować te funkcje co podano wyzej

podkreslam że jest to tylko program dla mnie wiec byle by dzialal lepie lub gorzej

///edit poradzilem sobie juz z ta funkcja

1 użytkowników online, w tym zalogowanych: 0, gości: 1