Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

Как удалить из txt пустую строку? Ъ   Найти похожие ветки 

 
FANAT ©   (2005-05-31 07:34) [0]

не могу ни как додуматься как удалить из txt.
вообще подразумевается что приоткрытии документа считывается последнии 4 символа и переводятся в integer....
но бывает иногда что в txt пишется пустая строка Ъ.
вот как бы в планах при открытии удалять эту Ъ - а потом брать 4 символа....
все как бы легко, но не могу избавиться от Ъ.
подскажите пожалуйста...


 
Alx2 ©   (2005-05-31 08:34) [1]

Четыре символа - они обязательно из множества ["0".."9"]? Или хранятся в бинарном виде?

Если для случая ["0".."9"], то примерно так:


 Function ReadLast4DigitsFiltered(Const FileName: String): Integer;
 Var
   Buf: Array[1..7] Of char;
   k: Integer;
 Begin
   With TFileStream.Create(FileName, fmOpenRead) Do
     Try
       If Size > 5 Then
         Begin
           Seek(Size - 6, soFromBeginning);
           If Read(Buf, 6) <> 6 Then
             Raise Exception.Create("Read error");
           For k := 1 To 6 Do
             If Not (Buf[k] In ["0".."9"])
               Then
               Buf[k] := " ";
           Buf[7] := #0;
           Result := StrToInt(Buf)
         End;
     Finally
       Free;
     End;
 End;


 
Antonn ©   (2005-05-31 08:35) [2]

FANAT ©   (31.05.05 7:34)
может TIniFile попробывать:)


 
Alx2 ©   (2005-05-31 08:38) [3]

к посту [1]
Надо бы для "If Size > 5 Then" добавить обработку в "else"


 
Alx2 ©   (2005-05-31 08:47) [4]

Сорри. Пост [1] с глюками :)


 
FANAT ©   (2005-05-31 09:01) [5]

блин.... слава всевышнему...
оказывается это сложно.... а то я уж подумал что я вообще ни чего не могу...
так какие еще идеи есть?


 
Digitman ©   (2005-05-31 09:07) [6]


> какие еще идеи есть?


если файл небольшой по размеру, грузить его в стринг-лист, в цикле от последней строки до первой искать непустую строку и взять из нее ожидаемые символы


 
Anatoly Podgoretsky ©   (2005-05-31 09:13) [7]

А есть ли мальчик?


 
Alx2 ©   (2005-05-31 09:21) [8]

FANAT ©   (31.05.05 9:01) [5]
>оказывается это сложно....


Ничего сложного. Просто то, что я написал впервые - глючное. Так как не проверял на случаях пустая строка + конец файла.

Этот вариант ловит  четыре подряд идущих цифры ["0".."9"] если они располагаются не далее, чем в трех байтах от конца файла и конвертирует их в integer  :)


 Function ReadLast4DigitsFiltered(Const FileName: String): Integer;
 Const
   BufSize = 7;
 Var
   Buf: Array[1..BufSize] Of char;
   k, CharCount, WasDigits: Integer;
 Begin
   With TFileStream.Create(FileName, fmOpenRead) Do
     Try
       If Size < BufSize Then
         CharCount := Size
       Else
         CharCount := BufSize;
       Seek(Size - CharCount, soFromBeginning);
       If Read(Buf, CharCount) <> CharCount Then
         Raise Exception.Create("Read error");

       WasDigits := 0;
       For k := 1 To BufSize Do
         If Not (Buf[k] In ["0".."9"])
           Then
           If WasDigits > 0 Then
             Buf[k] := #0
           Else
             Buf[k] := " "
         Else
           inc(WasDigits);

       If WasDigits <> 4 Then
         Raise Exception.Create("Data error");

       Result := StrToInt(Buf)

     Finally
       Free;
     End;
 End;



 
Anatoly Podgoretsky ©   (2005-05-31 09:36) [9]

Не мешало бы увидеть эту "неправильную" строку в шестнадцатиричном виде.


 
Alx2 ©   (2005-05-31 09:46) [10]

Anatoly Podgoretsky ©   (31.05.05 9:36) [9]

..... $0D,$0A,$1A ?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.037 c
4-1113908164
grigory
2005-04-19 14:56
2005.06.14
Снова Hook! Завершение процессов!


1-1116939853
Андрюха7
2005-05-24 17:04
2005.06.14
Доступ на Delphi к значению функции - массиву записей


4-1114250886
Керик
2005-04-23 14:08
2005.06.14
SHBrowseForFolder


14-1117028731
Lexer
2005-05-25 17:45
2005.06.14
OR в C++ одним знаком


1-1117524388
sofs
2005-05-31 11:26
2005.06.14
Мемо





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский