Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

czytanie pliku linia po linii - z UTF8

95 views
Skip to first unread message

goo-...@ciach.net

unread,
Apr 13, 2016, 5:50:00 AM4/13/16
to
Ma ktoś może sprawdzony sposób, jak czytać plik tekstowy, zawierający UTF8 - linia po linii?
Takie dawne AssignFile, ReadLn - tylko z UTF8.

Andrzej

Piotr Brzeziński

unread,
Apr 13, 2016, 6:47:44 AM4/13/16
to
TStreamReader ma metodę ReadLine

PB

Miroo

unread,
Apr 13, 2016, 7:42:22 AM4/13/16
to
W dniu 2016-04-13 o 11:50, goo-...@ciach.net pisze:
> Ma ktoś może sprawdzony sposób, jak czytać plik tekstowy, zawierający UTF8 - linia po linii?
> Takie dawne AssignFile, ReadLn - tylko z UTF8.

A "AssignFile, ReadLn" nie działa dla plików w UTF-8?

Pozdrawiam

goo-...@ciach.net

unread,
Apr 13, 2016, 8:08:42 AM4/13/16
to
W dniu środa, 13 kwietnia 2016 13:42:22 UTC+2 użytkownik Miroo napisał:
> W dniu 2016-04-13 o 11:50, goo-mlyny pisze:
> > Ma ktoś może sprawdzony sposób, jak czytać plik tekstowy, zawierający UTF8 - linia po linii?
> > Takie dawne AssignFile, ReadLn - tylko z UTF8.
>
> A "AssignFile, ReadLn" nie działa dla plików w UTF-8?
Zależy, co określimy jako "działa" ;)
Generalnie - jak masz S: String i robisz ReadLn(PlikZrodlowy, S); - to w S pojawiają się "krzaki".

goo-...@ciach.net

unread,
Apr 13, 2016, 8:10:59 AM4/13/16
to
Dzięki - to znam, pytałem (choć może nie napisałem tego wyraźnie) o jakieś informacje bardziej praktyczne. Np, że jakaś metoda działa wolno a inna szybko. Będę przetwarzał dosyć duże pliki (nawet setki MB) i jak zgromadzę jakąś wiedzę przed robotą - to mogę uniknąć jakichś typowych wpadek.

Andrzej

szemrany

unread,
Apr 13, 2016, 8:24:54 AM4/13/16
to
On Wed, 13 Apr 2016 05:08:42 -0700 (PDT), goo-...@ciach.net wrote:

>> A "AssignFile, ReadLn" nie działa dla plików w UTF-8?
> Zależy, co określimy jako "działa" ;)
> Generalnie - jak masz S: String i robisz ReadLn(PlikZrodlowy, S); - to w S pojawiają się "krzaki".

To może ...użyj typu UTF8String? :-)

--
howgh
szemrany
"Zrozumienie umożliwia zastąpienie nieracjonalnych działań lub bezradności
przez działania racjonalne." M.Mazur, ojciec polskiej szkoły cybernetyki

wloochacz

unread,
Apr 13, 2016, 8:37:10 AM4/13/16
to
W dniu 2016-04-13 o 14:24, szemrany pisze:
> On Wed, 13 Apr 2016 05:08:42 -0700 (PDT), goo-...@ciach.net wrote:
>
>>> A "AssignFile, ReadLn" nie działa dla plików w UTF-8?
>> Zależy, co określimy jako "działa" ;)
>> Generalnie - jak masz S: String i robisz ReadLn(PlikZrodlowy, S); - to w S pojawiają się "krzaki".
>
> To może ...użyj typu UTF8String? :-)
W ogóle nie rozumiem w czym jest problem...

AssignFile (F, FielName, CP_UTF8 <<-- kodowanie);
Reset (F);
itd...

Pytanie brzmi - jakie to Delphi ma Kolega do dyspozycji? Bo jak jakiś
staroć, to trzeba kombinować...

--
wloochacz

goo-...@ciach.net

unread,
Apr 13, 2016, 8:47:27 AM4/13/16
to
W dniu środa, 13 kwietnia 2016 14:37:10 UTC+2 użytkownik wloochacz napisał:
> W dniu 2016-04-13 o 14:24, szemrany pisze:
> > On Wed, 13 Apr 2016 05:08:42 -0700 (PDT), goo-mlyny wrote:
> >
> >>> A "AssignFile, ReadLn" nie działa dla plików w UTF-8?
> >> Zależy, co określimy jako "działa" ;)
> >> Generalnie - jak masz S: String i robisz ReadLn(PlikZrodlowy, S); - to w S pojawiają się "krzaki".
> >
> > To może ...użyj typu UTF8String? :-)
> W ogóle nie rozumiem w czym jest problem...
>
> AssignFile (F, FielName, CP_UTF8 <<-- kodowanie);
W tym, że jakoś mi umknęło, że AssignFile może mieć dodatkowy parametr...
Miałem stary kod, który z plikiem UTF-8 nie działał tak, jak należy.
Zaraz sprawdzę, jak zadziała teraz.

Andrzej

goo-...@ciach.net

unread,
Apr 13, 2016, 8:55:55 AM4/13/16
to
Bingo :) Wiedziałem, że warto spytać na grupie :)

Miroo

unread,
Apr 13, 2016, 9:03:47 AM4/13/16
to
W dniu 2016-04-13 o 14:08, goo-...@ciach.net pisze:
Jest coś takiego jak UTF8Decode. Przy tej okazji warto używać
widestringów, żeby program działał dobrze również na windowsach
niepolskich (zakładając, że czytany plik jest po polsku).

Pamiętać należy, że pliki zapisane w UTF-8 często mają BOM (Byte Order
Mark) na początku - w wikipedii jest to ładnie opisane.

Pozdrawiam

darekm

unread,
Apr 18, 2016, 12:41:36 PM4/18/16
to
Szybkość odczytu zależy od wielkości czytanego fragmentu. Dlatego
należy albo wprowadzić bufor, tak aby plik był czytany dużymi
fragmentami ( kiedyś czytałem że optymalne jest 0.5MB) albo skorzystać z
memory mapped file. A dopiero potem zastanowić się nad podziałem na
poszczególne linie.

Drugim elementem wpływającym na szybkość są konwersje (gdy są
niepotrzebne np utf8 -> wide ->utf8) szczególnie że część się odbywa
niejawnie.

--
Darek
0 new messages