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

Вниз

длина строк в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
15-1322338591
SQLEX
2011-11-27 00:16
2012.03.18
Как фильм называется про разведку


2-1323088905
ШК
2011-12-05 16:41
2012.03.18
Отвправка почты средствами Indy в gmail


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


8-1222932092
AlexOld
2008-10-02 11:21
2012.03.18
Удалить часть данных из открытого файла


15-1322128809
БарЛог
2011-11-24 14:00
2012.03.18
Tiff -> Jpg converter





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский