Π Π°Π±ΠΎΡ‚Π° с тСкстовыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых вострСбованных Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с внСшними систСмами, ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π»ΠΎΠ³ΠΎΠ². НСсмотря Π½Π° ΠΊΠ°ΠΆΡƒΡ‰ΡƒΡŽΡΡ простоту, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ TXT-Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ‚Π°ΠΈΡ‚ мноТСство нюансов: ΠΎΡ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами β€” ΠΎΡ‚ стандартных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² встроСнного языка Π΄ΠΎ использования Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

ΠœΡ‹ рассмотрим Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ: Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (UTF-8, Windows-1251), ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ строкам, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π΄Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° протСстированы Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·Π°Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3.22 ΠΈ Π²Ρ‹ΡˆΠ΅.

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ всСго Ρ„Π°ΠΉΠ»Π° Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Π·Π° Ρ€Π°Π· ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊΡ€Π°Ρ…ΠΎΠΌ систСмы ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π»ΠΎΠ³Π°ΠΌΠΈ объСмом Π² Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Ρ‹, ΠΈ ΠΊΠ°ΠΊ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ. А Π² ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ β€” FAQ с ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ Π½Π° самыС частыС вопросы ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅.

1. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: Π§Ρ‚Π΅Π½ΠΈΠ΅ TXT Ρ„Π°ΠΉΠ»Π° Ρ‡Π΅Ρ€Π΅Π· ЧтСниСВСкста()

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ тСкстовый Ρ„Π°ΠΉΠ» Π² 1Π‘ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ЧтСниСВСкста(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² (Π΄ΠΎ 10-20 ΠœΠ‘) ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • πŸ“ ИмяЀайла β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€: "C:\Temp\data.txt")
  • πŸ”€ ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π° β€” ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ANSI, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ явно ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF8)
  • πŸ”„ Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊ β€” символы, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Π΅Ρ† строки (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π‘ΠΈΠ²ΠΎΠ»Ρ‹.ПБ)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для чтСния Ρ„Π°ΠΉΠ»Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° содСрТимого Π² сообщСниС:

ИмяЀайла = "C:\Temp\example.txt";

Если НЕ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ(ИмяЀайла) Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½!", БтатусБообщСния.Π’Π°ΠΆΠ½ΠΎΠ΅);

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ВСкстЀайла = Новый ЧтСниСВСкста(ИмяЀайла, ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF8);

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ = ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ();

ВСкстЀайла.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅);

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ѐункция ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ() Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ вСсь Ρ„Π°ΠΉΠ» Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 50 ΠœΠ‘ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкС Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти. Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ построчноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (см. Ρ€Π°Π·Π΄Π΅Π» 3).

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Windows-1251 для старых систСм), ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Π΅Π΅ явно:

ВСкстЀайла = Новый ЧтСниСВСкста(ИмяЀайла, ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.ANSI);
πŸ“Š Какой способ чтСния TXT-Ρ„Π°ΠΉΠ»ΠΎΠ² Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Π§Π΅Ρ€Π΅Π· ЧтСниСВСкста()
ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΠΎ с ЧтСниСВСкста
Π§Π΅Ρ€Π΅Π· COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
Π§Π΅Ρ€Π΅Π· внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹
Π”Ρ€ΡƒΠ³ΠΎΠΉ

2. Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠΎ строкам: ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ²

Когда Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 50-100 ΠœΠ‘, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ всСго содСрТимого Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ становится опасным. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ построчноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ().

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

  • πŸš€ МинимальноС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти (обрабатываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тСкущая строка)
  • πŸ› οΈ Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚
  • ⚑ БыстрСС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ строк

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для построчного чтСния с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² строк:

ИмяЀайла = "C:\Temp\large_log.txt";

НомСрБтроки = 0;

ВСкстЀайла = Новый ЧтСниСВСкста(ИмяЀайла, ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF8);

Пока Π˜ΡΡ‚ΠΈΠ½Π° Π¦ΠΈΠΊΠ»

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ();

Если Π‘Ρ‚Ρ€ΠΎΠΊΠ° = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

НомСрБтроки = НомСрБтроки + 1;

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° строки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, поиск ошибок)

Если Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "ERROR") > 0 Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Ошибка Π² строкС " + НомСрБтроки + ": " + Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ВСкстЀайла.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 1 Π“Π‘ Π΄Π°ΠΆΠ΅ построчноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (см. Ρ€Π°Π·Π΄Π΅Π» 5) ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ разбиСния Ρ„Π°ΠΉΠ»Π° Π½Π° части.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свободноС мСсто Π½Π° дискС|Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² коррСктности ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ|ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ строк|Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию Ρ„Π°ΠΉΠ»Π°|ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΡŒΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ошибок-->

3. Π Π°Π±ΠΎΡ‚Π° с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ: UTF-8, ANSI, KOI8-R

Одна ΠΈΠ· самых распространСнных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ² β€” нСвСрная ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°. Если Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ чтСния "кракозябры" (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ÐозÑниÑа вмСсто "Π ΠΎΠ·Π½ΠΈΡ†Π°"), Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»Π° Π½Π΅ совпадаСт с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΠΊΠΎΠ΄Π΅.

Π’ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8.3 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ основныС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ:

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠšΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF8Unicode, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС языкиБоврСмСнныС Ρ„Π°ΠΉΠ»Ρ‹, Π²Π΅Π±-Π΄Π°Π½Π½Ρ‹Π΅
ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.ANSIWindows-1251 (CP1251)Π€Π°ΠΉΠ»Ρ‹ ΠΈΠ· старых Windows-систСм
ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.OEMDOS-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° (CP866)Π›ΠΎΠ³ΠΈ оборудования, старыС Π±Π°Π·Ρ‹
ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF16Unicode с фиксированной ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉΠ€Π°ΠΉΠ»Ρ‹ ΠΈΠ· macOS ΠΈΠ»ΠΈ Linux

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ„Π°ΠΉΠ»Π°, ΠΌΠΎΠΆΠ½ΠΎ:

  1. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Notepad++ (ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Π² строкС состояния)
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ chardetect ΠΈΠ· Python
  3. ΠŸΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ Π² 1Π‘

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ автоматичСского опрСдСлСния ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ (ΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ UTF-8, Π·Π°Ρ‚Π΅ΠΌ ANSI):

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ€Π°ΠΉΠ»Π‘ΠΠ²Ρ‚ΠΎΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ = Ѐункция(ИмяЀайла)

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

ВСкстЀайла = Новый ЧтСниСВСкста(ИмяЀайла, ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF8);

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ();

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

ВСкстЀайла = Новый ЧтСниСВСкста(ИмяЀайла, ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.ANSI);

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ();

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ "Ошибка чтСния Ρ„Π°ΠΉΠ»Π°: " + ОписаниСОшибки();

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ;

πŸ’‘

Если Ρ„Π°ΠΉΠ» содСрТит ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π² UTF-8, Π° Π΄Π°Π½Π½Ρ‹Π΅ Π² ANSI), рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ Ρ‚ΠΈΠΏΠ° iconv ΠΈΠ»ΠΈ recode.

4. Π§Ρ‚Π΅Π½ΠΈΠ΅ TXT Ρ‡Π΅Ρ€Π΅Π· COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (для слоТных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ²)

Π’ случаях, ΠΊΠΎΠ³Π΄Π° стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ 1Π‘ Π½Π΅ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, содСрТащими Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ нСстандартныС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ), ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. НаиболСС ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ADODB.Stream.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • πŸ”§ Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ²
  • πŸ“Š Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
  • πŸ”„ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ чтСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ чтСния Ρ„Π°ΠΉΠ»Π° Ρ‡Π΅Ρ€Π΅Π· ADODB.Stream:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

Stream = Новый COMΠžΠ±ΡŠΠ΅ΠΊΡ‚("ADODB.Stream");

Stream.Type = 2; // ВСкстовый Ρ‚ΠΈΠΏ

Stream.Charset = "utf-8"; // ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°

Stream.Open();

Stream.LoadFromFile("C:\Temp\data.txt");

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ = Stream.ReadText();

Stream.Close();

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅);

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Ошибка COM: " + ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ADODB.Stream Π½Π° клиСнтском ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ установлСны ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² стандартной установкС Windows). Если Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка "Класс Π½Π΅ зарСгистрирован", ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅:

  • πŸ–₯️ НаличиС Microsoft Data Access Components (MDAC)
  • πŸ”§ Π Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ 1Π‘ ΠΈ ОБ (32-bit vs 64-bit)
  • πŸ›‘οΈ ΠŸΡ€Π°Π²Π° доступа ΠΊ COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ИспользованиС COM-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌΠΈ бСзопасности Π² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… сСтях. ΠŸΠ΅Ρ€Π΅Π΄ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ согласуйтС Π΅Π³ΠΎ с администратором систСмы.

5. ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ API

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡΠ²Π΅Ρ€Ρ…Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² (ΠΎΡ‚ 1 Π“Π‘) ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² со слоТной структурой (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JSON-Π»ΠΎΠ³ΠΈ Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅) стандартныС срСдства 1Π‘ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСдостаточно эффСктивны. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ:

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ:

  • πŸ“¦ 1Script.Text β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с тСкстами
  • πŸ”Œ AddIn-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° C#/C++
  • 🌐 Π’Ρ‹Π·ΠΎΠ² Π²Π½Π΅ΡˆΠ½ΠΈΡ… API Ρ‡Π΅Ρ€Π΅Π· HTTP-запросы

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования внСшнСй ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ TextProcessor (гипотСтичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€):

Π’Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹ΠΉΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ = Новый AddIn("TextProcessor.AddIn");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π’Π΅ΠΊΡΡ‚ΠΎΠ²Ρ‹ΠΉΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ€Π°ΠΉΠ»ΠŸΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‡Π½ΠΎ(

"C:\Temp\huge_log.txt",

ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF8,

10000 // Число строк Π½Π° страницу

);

Для КаТдого Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Из Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π¦ΠΈΠΊΠ»

// ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° страницы Π΄Π°Π½Π½Ρ‹Ρ…

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ строк: " + Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π°.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠ‘Ρ‚Ρ€ΠΎΠΊ());

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚:

  • ⚑ Высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄)
  • πŸ› οΈ Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности парсинга
  • πŸ”„ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° многопоточности

НСдостатки:

  • πŸ’° Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ/ΠΏΠΎΠΊΡƒΠΏΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹
  • πŸ”§ ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ рСгистрации Π½Π° клиСнтских ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…
  • πŸ›‘οΈ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с обновлСниями ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ
Когда стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹?

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях:

1. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 1 Π“Π‘, ΠΊΠΎΠ³Π΄Π° стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ 1Π‘ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ слишком ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ.

2. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ парсинга слоТных тСкстовых Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ JSON Π² TXT).

3. ВрСбуСтся высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя).

4. НуТна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° спСцифичСских ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ, Π½Π΅ доступных Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ 1Π‘.

5. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с внСшними систСмами, Π³Π΄Π΅ трСбуСтся особая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСкстовых Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

6. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ 1Π‘ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с тСкстовыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Π’ΠΎΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС ошибки ΠΈ способы ΠΈΡ… исправлСния:

ΠžΡˆΠΈΠ±ΠΊΠ°ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Π Π΅ΡˆΠ΅Π½ΠΈΠ΅
"Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½" НСвСрный ΠΏΡƒΡ‚ΡŒ ΠΈΠ»ΠΈ отсутствиС ΠΏΡ€Π°Π² ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠŸΡƒΡ‚ΡŒΠšΠ€Π°ΠΉΠ»Ρƒ() ΠΈ ΠΏΡ€Π°Π²Π° доступа
"ΠšΡ€Π°ΠΊΠΎΠ·ΡΠ±Ρ€Ρ‹" вмСсто тСкста НСвСрная ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ UTF-8, ANSI ΠΈΠ»ΠΈ OEM
"НСдостаточно памяти" Π€Π°ΠΉΠ» слишком большой Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ построчноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹
"Доступ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½" Π€Π°ΠΉΠ» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ всС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»
"НСвСрный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°" ΠŸΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ» Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅

Особая катСгория ошибок связана с сСтСвыми путями. ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ сСти (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, \\server\share\file.txt) ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с:

  • πŸ” ΠŸΡ€Π°Π²Π°ΠΌΠΈ доступа (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· Пинг())
  • 🌐 Π’Π°ΠΉΠΌ-Π°ΡƒΡ‚Π°ΠΌΠΈ (ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ ВаймАут)
  • πŸ“‘ ΠΠ΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ соСдинСниСм (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок ΠΏΡ€ΠΈ сСтСвом доступС:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

ВСкстЀайла = Новый ЧтСниСВСкста("\\server\share\data.txt");

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ = ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ();

ВСкстЀайла.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Если Π’ΠΈΠΏΠ—Π½Ρ‡(ОписаниСОшибки()) = Π’ΠΈΠΏ("ОписаниСОшибки") Π’ΠΎΠ³Π΄Π°

Если Найти(ОписаниСОшибки().Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, "ΡΠ΅Ρ‚ΡŒ") > 0 Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Ошибка сСти: " + ОписаниСОшибки().Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅);

// ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒΠ§Π΅Ρ€Π΅Π·(10); // Π’Π°ΡˆΠ° функция Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ

Π˜Π½Π°Ρ‡Π΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Ошибка: " + ОписаниСОшибки().Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

πŸ’‘

ВсСгда ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ! Π”Π°ΠΆΠ΅ простая опСрация чтСния ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ошибкой ΠΈΠ·-Π·Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° антивирусом, ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сСтСвого соСдинСния ΠΈΠ»ΠΈ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠΈ памяти.

7. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: ΠŸΠ°Ρ€ΡΠΈΠ½Π³ структурированных Π΄Π°Π½Π½Ρ‹Ρ…

Часто тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ содСрТат структурированныС Π΄Π°Π½Π½Ρ‹Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CSV Π² TXT-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈ с раздСлитСлями). Рассмотрим, ΠΊΠ°ΠΊ эффСктивно ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: Π§Ρ‚Π΅Π½ΠΈΠ΅ CSV-Ρ„Π°ΠΉΠ»Π°

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» prices.txt с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

НаимСнованиС;Π¦Π΅Π½Π°;ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ

Π’ΠΎΠ²Π°Ρ€1;100.50;10

Π’ΠΎΠ²Π°Ρ€2;200.75;5

Код для парсинга:

ИмяЀайла = "C:\Temp\prices.txt";

ВСкстЀайла = Новый ЧтСниСВСкста(ИмяЀайла, ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF8);

// ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ();

ΠœΠ°ΡΡΠΈΠ²Π”Π°Π½Π½Ρ‹Ρ… = Новый Массив();

Пока Π˜ΡΡ‚ΠΈΠ½Π° Π¦ΠΈΠΊΠ»

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ();

Если Π‘Ρ‚Ρ€ΠΎΠΊΠ° = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Π”Π°Π½Π½Ρ‹Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠΈ = Π Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒΠŸΠΎΠ Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŽ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ";");

Если Π”Π°Π½Π½Ρ‹Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠΈ.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() = 3 Π’ΠΎΠ³Π΄Π°

ΠœΠ°ΡΡΠΈΠ²Π”Π°Π½Π½Ρ‹Ρ….Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π”Π°Π½Π½Ρ‹Π΅Π‘Ρ‚Ρ€ΠΎΠΊΠΈ);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ВСкстЀайла.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

// Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π”Π°Π½Π½Ρ‹Ρ… Из ΠœΠ°ΡΡΠΈΠ²Π”Π°Π½Π½Ρ‹Ρ… Π¦ΠΈΠΊΠ»

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π”Π°Π½Π½Ρ‹Ρ…[0] + ": " + Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π”Π°Π½Π½Ρ‹Ρ…[1] + " Ρ€ΡƒΠ±. x" + Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π”Π°Π½Π½Ρ‹Ρ…[2]);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: Анализ Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π°

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ Π»ΠΎΠ³-Ρ„Π°ΠΉΠ» server.log с записями Π²ΠΈΠ΄Π°:

[2026-05-15 14:30:22] [ERROR] Ошибка ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π”

[2026-05-15 14:30:25] [INFO] БСрвис Π·Π°ΠΏΡƒΡ‰Π΅Π½

Код для поиска ошибок:

ИмяЀайла = "C:\Logs\server.log";

ВСкстЀайла = Новый ЧтСниСВСкста(ИмяЀайла);

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠžΡˆΠΈΠ±ΠΎΠΊ = 0;

Пока Π˜ΡΡ‚ΠΈΠ½Π° Π¦ΠΈΠΊΠ»

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ();

Если Π‘Ρ‚Ρ€ΠΎΠΊΠ° = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Если Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "[ERROR]") > 0 Π’ΠΎΠ³Π΄Π°

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠžΡˆΠΈΠ±ΠΎΠΊ = ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠžΡˆΠΈΠ±ΠΎΠΊ + 1;

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ΠžΠ¨Π˜Π‘ΠšΠ: " + Π‘Ρ€Π΅Π΄(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "]") + 2));

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ВСкстЀайла.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("ВсСго ошибок Π½Π°ΠΉΠ΄Π΅Π½ΠΎ: " + ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠžΡˆΠΈΠ±ΠΎΠΊ);

Для слоТных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Π»ΠΎΠ³ΠΎΠ² (с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² JSON) Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСциализированныС парсСры ΠΈΠ»ΠΈ внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

8. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΡ‚ 100 ΠœΠ‘ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ становится критичСским Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. Π’ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:

Бпособы ускорСния чтСния:

  • ⚑ ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ вмСсто Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ всСго Ρ„Π°ΠΉΠ»Π°
  • πŸ—ƒοΈ БуфСризация: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΏΠΎ 1000-10000 строк
  • πŸ”„ ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ (Ρ‡Π΅Ρ€Π΅Π· внСшниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹)
  • πŸ—‘οΈ ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ чтСния с Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ:

ИмяЀайла = "C:\Temp\huge_file.txt";

Π Π°Π·ΠΌΠ΅Ρ€Π‘ΡƒΡ„Π΅Ρ€Π° = 10000; // Π‘Ρ‚Ρ€ΠΎΠΊ Π² Π±ΡƒΡ„Π΅Ρ€Π΅

ВСкстЀайла = Новый ЧтСниСВСкста(ИмяЀайла);

Π‘ΡƒΡ„Π΅Ρ€ = Новый Массив();

НомСрБтроки = 0;

Пока Π˜ΡΡ‚ΠΈΠ½Π° Π¦ΠΈΠΊΠ»

// Π§ΠΈΡ‚Π°Π΅ΠΌ Π±Π»ΠΎΠΊ строк

Для Π‘Ρ‡ = 1 По Π Π°Π·ΠΌΠ΅Ρ€Π‘ΡƒΡ„Π΅Ρ€Π° Π¦ΠΈΠΊΠ»

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ();

Если Π‘Ρ‚Ρ€ΠΎΠΊΠ° = НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Π‘ΡƒΡ„Π΅Ρ€.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Если Π‘ΡƒΡ„Π΅Ρ€.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() = 0 Π’ΠΎΠ³Π΄Π°

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ; // Π€Π°ΠΉΠ» закончился

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

// ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π±ΡƒΡ„Π΅Ρ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΡ‰Π΅ΠΌ ошибки)

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ° Из Π‘ΡƒΡ„Π΅Ρ€ Π¦ΠΈΠΊΠ»

НомСрБтроки = НомСрБтроки + 1;

Если Найти(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "ERROR") > 0 Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Ошибка Π² строкС " + НомСрБтроки);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π‘ΡƒΡ„Π΅Ρ€.ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ();

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ВСкстЀайла.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

Для Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 10 Π“Π‘ рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ:

  1. РазбиСния Ρ„Π°ΠΉΠ»Π° Π½Π° части внСшними ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ (split Π² Linux)
  2. Использования Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… (Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² SQL ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Π°ΠΌ)
  3. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ спСциализированных ETL-инструмСнтов
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² сСтСвых ΠΏΠ°ΠΏΠΊΠ°Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² 10-100 Ρ€Π°Π· ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ дисками. По возмоТности ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ диск ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ.
πŸ’‘

Для максимальной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ построчноС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ с Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎ возмоТности ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° SSD-дисках.

FAQ: ЧастыС вопросы ΠΏΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ TXT Π² 1Π‘

Как ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ„Π°ΠΉΠ»Π°, Ссли ΠΎΠ½ отобраТаСтся кракозябрами?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» Π² Notepad++ β€” ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° отобраТаСтся Π² строкС состояния.
  2. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² 1Π‘ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (UTF-8, ANSI, OEM).
  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ внСшниС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° chardetect (ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° chardet для Python).

НаиболСС ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° для соврСмСнных систСм β€” UTF-8.

МоТно Π»ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ TXT-Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обновляСтся Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π»ΠΎΠ³ сСрвСра)?

Π”Π°, Π½ΠΎ с ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ() Π² Ρ†ΠΈΠΊΠ»Π΅ с Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ.
  • НС ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» Π½Π° запись ΠΈΠ· 1Π‘ β€” это Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ для Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов.
  • Для Linux-систСм ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ tail -f Ρ‡Π΅Ρ€Π΅Π· внСшниС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π»ΠΎΠ³Π°:

ВСкстЀайла = Новый ЧтСниСВСкста("C:\Logs\server.log");

Пока Π˜ΡΡ‚ΠΈΠ½Π° Π¦ΠΈΠΊΠ»

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = ВСкстЀайла.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ();

Если Π‘Ρ‚Ρ€ΠΎΠΊΠ° <> НСопрСдСлСно Π’ΠΎΠ³Π΄Π°

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

Π˜Π½Π°Ρ‡Π΅

ΠŸΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ(1); // ΠŸΠ°ΡƒΠ·Π° 1 сСкунда

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Как ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ TXT-Ρ„Π°ΠΉΠ» ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΏΠΎ URL?

Для чтСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ HTTP/HTTPS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ HTTPΠ‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅:

HTTP = Новый HTTPΠ‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅("www.example.com", 80);

Запрос = Новый HTTPЗапрос("/data.txt");

ΠžΡ‚Π²Π΅Ρ‚ = HTTP.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ(Запрос);

ВСкстЀайла = ΠžΡ‚Π²Π΅Ρ‚.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ’Π΅ΠΊΡΡ‚();

Для HTTPS Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ настройку бСзопасности:

HTTP = Новый HTTPΠ‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅("www.example.com", 443,,,,Π˜ΡΡ‚ΠΈΠ½Π°);
МоТно Π»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ TXT-Ρ„Π°ΠΉΠ» нСпосрСдствСнно Π² 1Π‘?

Π”Π°, для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π—Π°ΠΏΠΈΡΡŒΠ’Π΅ΠΊΡΡ‚Π°:

Π—Π°ΠΏΠΈΡΡŒ = Новый Π—Π°ΠΏΠΈΡΡŒΠ’Π΅ΠΊΡΡ‚Π°("C:\Temp\output.txt");

Π—Π°ΠΏΠΈΡΡŒ.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ("Новая строка 1");

Π—Π°ΠΏΠΈΡΡŒ.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠ‘Ρ‚Ρ€ΠΎΠΊΡƒ("Новая строка 2");

Π—Π°ΠΏΠΈΡΡŒ.Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ();

Для добавлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ Π”ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ:

Π—Π°ΠΏΠΈΡΡŒ = Новый Π—Π°ΠΏΠΈΡΡŒΠ’Π΅ΠΊΡΡ‚Π°("C:\Temp\output.txt",,,ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Π’Π΅ΠΊΡΡ‚Π°.UTF8, Π˜ΡΡ‚ΠΈΠ½Π°);
Как ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ TXT-Ρ„Π°ΠΉΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 50 Π“Π‘, Π½Π΅ загруТая Π΅Π³ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ?

Для Ρ‚Π°ΠΊΠΈΡ… объСмов рСкомСндуСтся:

  1. Π Π°Π·Π±ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π½Π° части внСшнСй ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, split Π² Linux).
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшнюю ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π½Π° C#/C++, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.
  3. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… (SQLite, PostgreSQL) ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΌ.
  4. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ спСциализированныС инструмСнты Ρ‚ΠΈΠΏΠ° Apache Spark для распрСдСлСнной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ любом случаС ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ чтСния всСго Ρ„Π°ΠΉΠ»Π° Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ 1Π‘ β€” это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΊΡ€Π°Ρ…Ρƒ систСмы.