Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.03.18;
Скачать: CL | DM;

Вниз

длина строк в TStringList   Найти похожие ветки 

 
gvozdkoff   (2011-12-05 12:40) [0]

Здравствуйте, уважаемые.
Задача такая:
есть текстовый файл такого вот содержания


#43faec76$GPRMC,181300.000,A,5508.9052,N,06122.6377,E,0.00,231.09,221111,,,A*68
##
#43faec76$GPRMC,181330.000,A,5508.9052,N,06122.6377,E,0.00,231.09,221111,,,A*6B


Кол-во строк может быть равно 1000
Задача:
1. посчитать количество символов в строках (построчно)
2. удалить строки , кол-во символов в которых < 3 (меньше 3).

вот что я делаю

Var
StrList: TStringList;
TempStr: String;
 L,i: Integer;
begin
StrList:= TStringList.Create;
try
StrList.LoadFromFile("2.txt");
TempStr:=StrList.CommaText; //либо TempStr:=StrList.Text;
L:=Length(TempStr);  // здесь мне подсчитывает все символы в файле
Label2.Caption:= inttostr(StrList.Count);
Label1.Caption:= inttostr(L);
finally
StrList.Free;


если же делаю так

L:=Length(TempStr[1]); // думаю что приписываю 1-ую строку и получу кол-во символов в ней


то результат у меня равен 1, причем всегда називисимо от значения

TempStr[1]

Ну и сам вопрос, как же посчитать кол-во символов в каждой строке?
Большое спасибо за потраченное время.


 
Медвежонок Пятачок ©   (2011-12-05 12:42) [1]

то результат у меня равен 1, причем всегда називисимо от значения

Все верно.
Это правильный результат.


 
Медвежонок Пятачок ©   (2011-12-05 12:43) [2]

Только это не длина строки.
Это длина первого символа в этой строке.


 
Ega23 ©   (2011-12-05 12:43) [3]


> то результат у меня равен 1, причем всегда називисимо от
> значения


Индексация начинается с нуля.


> Ну и сам вопрос, как же посчитать кол-во символов в каждой
> строке?


for i := 0 to strList.Count - 1 do
 ShowMessage(IntToStr(Length(strList[i])));


 
icWasya ©   (2011-12-05 12:46) [4]

а почему так
L:=Length(TempStr[1]);
а не так
L:=Length(StrList[1]);


 
Медвежонок Пятачок ©   (2011-12-05 12:51) [5]

L:=Length(TempStr[1]); // думаю что приписываю 1-ую строку и получу кол-во символов в ней

А ты не только думай.
Ты еще и проверяй о том ли ты думаешь

ShowMessage(TempStr[1]);


 
gvozdkoff   (2011-12-05 12:58) [6]

Спасибо вам большое, за подсказку и за критику, так быстро, даже не ожидал
Сейчас буду пробовать


 
Anatoly Podgoretsky ©   (2011-12-05 13:00) [7]


> Медвежонок Пятачок ©   (05.12.11 12:51) [5]

Он еще и AV получит, на пустых строках.


 
gvozdkoff   (2011-12-05 13:03) [8]


> Anatoly Podgoretsky ©   (05.12.11 13:00) [7]
>
> > Медвежонок Пятачок ©   (05.12.11 12:51) [5]
>
> Он еще и AV получит, на пустых строках.
>
>


а что такое AV  ?
Вообщем то мне длину строк надо получить лишь для того, чтобы удалить потом строки такого содеожания
##
то есть пустые


 
RWolf ©   (2011-12-05 13:25) [9]


> а что такое AV

Access Violation.
Возникает, в частности, при попытке разыменовать нулевой указатель; в данном случае (TempStr[1]) это произойдёт, если TempStr="".


 
Сергей М. ©   (2011-12-05 13:30) [10]


> Кол-во строк может быть равно 1000


Всего-то 1000 ? Ну это курам на смех...

> как же посчитать кол-во символов в каждой строке?

А ничего считать и не надо.
Грузишь все это хозяйство в стринглист, получаешь всю строку чтением  св-ва Text, одним вызовом StringReplace вырезаешь из строки ненужные подстроки и результат вызова StringReplace суешь назад в стринглист записью в св-во Text


 
gvozdkoff   (2011-12-05 14:56) [11]

вот что у меня получилось

Var
StrList: TStringList;
TempStr: String;
 L,i: Integer;
begin
 StrList:= TStringList.Create;
 try
   StrList.LoadFromFile("2.txt");
      for i := 0 to StrList.Count - 1 do begin
     TempStr :=  StrList.Strings[i];
     L := Length(TempStr);
     if L=2 then StrList.Delete(i);
     StrList.SaveToFile("2.txt");
   end;

 finally
   StrList.Free;
 end;


но как и было упомянуто выше , если в файле есть пустые строки, то выходит ошибка, причем если пустая строка в конце файла, то по условию все строки с кол-вом символов < 4 удаляются + ошибка в конце, если же в середине файла пустая строка, то так же по условию все обрабатывается + ощибка, но пустая строка в середине не удаляется

Как бы это исправить ?
Может проверить сначала на наличие пустых строк ?


 
Сергей М. ©   (2011-12-05 15:00) [12]


StrList.LoadFromFile("2.txt");
StrList.Text := StringReplace(StrList.Text, "##"#13#10, "", [rfReplaceAll]);
StrList.SaveToFile("2.txt");


 
Омлет ©   (2011-12-05 15:01) [13]

   StrList.LoadFromFile("2.txt");
   for i := StrList.Count - 1 downto 0 do
     if Length(StrList[i]) <= 2 then
       StrList.Delete(i);
   StrList.SaveToFile("2.txt");


 
gvozdkoff   (2011-12-05 15:03) [14]

Урраа !)))
Спасибо Вам огромное!



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

Текущий архив: 2012.03.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.006 c
15-1322166427
картман
2011-11-25 00:27
2012.03.18
Service1.exe /install


2-1322926956
Gu
2011-12-03 19:42
2012.03.18
StringOf


15-1321993802
Юрий
2011-11-23 00:30
2012.03.18
С днем рождения ! 23 ноября 2011 среда


15-1322253003
Юрий
2011-11-26 00:30
2012.03.18
С днем рождения ! 26 ноября 2011 суббота


15-1315555388
Василий Жогарев
2011-09-09 12:03
2012.03.18
Перевод заголовочного файла *.h в подключаемый модуль *.pas