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

Вниз

Как "склеить" строки?   Найти похожие ветки 

 
Tornado ©   (2004-04-28 11:12) [0]

есть такой текстовой файл:

                   
nov-01-vtg-diagnost-nek              
rasov                                                            
nov-01-vtg-diagnost-shi          
shko                                                              
nov-01-vtg-ivc-lukshina            
nov-01-vtg-ivc-muravyev


т.е. первые два адреса идут с переносом на следующую строку (это связано с ограниченностью длины строки в 23 символа), а остальные два убрались в одну строку. Это фрагмент списка, таких вариантов может быть много. Мне нужно как бы "склеить" те адреса которые переносятся в одну строку. Все адреса начинаются с "nov", это можно использовать как ключевое слово. Вопрос как "склеить"? Спасибо.


 
GroZ   (2004-04-28 11:19) [1]

Ну оновании данной информации невозможно сделать алгоритм корректно работающий во всех случаях, например как быть в случае:

nov-01-vtg-diagnost-nek
rasov
nov-01-vtg-diagnost-shi
nov
nov-01-vtg-ivc-lukshina
nov-01-vtg-ivc-muravyev
?
недостаточность информации


 
Sha ©   (2004-04-28 11:21) [2]

Распечатываешь, вырезаешь, склеиваешь :)
Что должно быть результатом: файл, StringList, Text или ...?


 
panov ©   (2004-04-28 11:31) [3]

Примерно так:

var
 List1,Lis2: TStringList;
 i: Integer;
begin
 List1 := TStringList.Create;
 List2 := TStringList.Create;  
 try
   List1.LoadFromFile("SrcFile.txt);
   
   for i := 0 to List1.Count-1 do
   begin
     if Pos("-",List1[i])=0
       then List2[List2.Count-1] := List2[List2.Count-1]+List1[i]
       else List2.Add(List1[i]);
   end;
   Memo1.Lines.Assign(List2);
 funally
   List1.Free;
   List2.Free;
 end;


 
GroZ   (2004-04-28 11:42) [4]

2 panov,
алгоритм не правильный, как и следовало ожидать ...


 
panov ©   (2004-04-28 11:46) [5]

>GroZ   (28.04.04 11:42) [4]
И чем же он неправильный?
Всё работат прекрасно.


 
panov ©   (2004-04-28 11:47) [6]

После прогона и исправления синтаксич. ошибок без изменения алгоритма:


procedure TForm1.Button3Click(Sender: TObject);
var
List1,List2: TStringList;
i: Integer;
begin
List1 := TStringList.Create;
List2 := TStringList.Create;
try
  List1.LoadFromFile("SrcFile.txt");
 
  for i := 0 to List1.Count-1 do
  begin
    if Pos("-",List1[i])=0
      then List2[List2.Count-1] := List2[List2.Count-1]+List1[i]
      else List2.Add(List1[i]);
  end;
  ListBox1.Items.Assign(List2);
finally
  List1.Free;
  List2.Free;
end;

end;


 
panov ©   (2004-04-28 11:48) [7]

>GroZ   (28.04.04 11:42) [4]

В следующий раз, прежде чем писать, проверь.


 
Андрей Сенченко ©   (2004-04-28 11:59) [8]

panov ©   (28.04.04 11:48)

nov-01-vtg-diagnost-nek
rasov
nov-01-vtg-diagnost-shi
nov
nov-01-vtg-specialdiagn
ost-ivanov
nov-01-vtg-ivc-muravyev


 
panov ©   (2004-04-28 12:02) [9]

>Андрей Сенченко ©   (28.04.04 11:59) [8]

а, если это имеешь ввиду, так исправляется парой дополнительных строк.


 
GroZ   (2004-04-28 12:05) [10]

2 panov,
проверь на таком тесте:

nov-01-vtg-diagnostichn
ost-nekrasov
nov-01-vtg-diagnost-shi
shko
nov-01-vtg-ivc-lukshina
nov-01-vtg-ivc-muravyev

правильный ответ которого должен быть:
nov-01-vtg-diagnostichnost-nekrasov
nov-01-vtg-diagnost-shishko
nov-01-vtg-ivc-lukshina
nov-01-vtg-ivc-muravyev


 
GroZ   (2004-04-28 12:12) [11]

2 panov,
в следующий раз проверяй алгоритм прежде чем отправлять ...


 
panov ©   (2004-04-28 12:15) [12]

>GroZ   (28.04.04 12:12) [11]

С исходными данными все работает. Сейчас будет и с остальными работать.


 
panov ©   (2004-04-28 12:28) [13]

Исходные данные:

nov-01-vtg-diagnostichn
ostforfirstotdel-nekras
ov
nov-01-vtg-diagnost-shi
shko
nov-01-vtg-ivc-lukshina
nov-01-vtg-ivc-muravyev

procedure TForm1.Button3Click(Sender: TObject);
var
List1,List2: TStringList;
i,j,Counter: Integer;
isFirstStr: Boolean;
begin
List1 := TStringList.Create;
List2 := TStringList.Create;
try
  List1.LoadFromFile("SrcFile.txt");

  isFirstStr := True;
  for i := 0 to List1.Count-1 do
  begin
    Counter := 0;
     for j := 1 to Length(List1[i]) do if List1[i][j]="-" then Inc(Counter);
     if Counter>2
       then List2.Add(List1[i])
       else List2[List2.Count-1] := List2[List2.Count-1]+List1[i];
  end;
  ListBox1.Items.Assign(List2);
finally
  List1.Free;
  List2.Free;
end;

end;


 
Anatoly Podgoretsky ©   (2004-04-28 12:55) [14]

Pos(максимально_длинная_левая_часть, )
пока по исходным данным это nov-01-vtg-


 
han_malign ©   (2004-04-28 12:56) [15]

>Андрей Сенченко ©   (28.04.04 11:59) [8]
- во придрались, главное идея, а необходимые условия можно и додумать...
(("nov-"<>copy(List1[i],1,4))or(Length(List1[i])<23))


 
panov ©   (2004-04-28 12:58) [16]

>han_malign ©   (28.04.04 12:56) [15]
>Anatoly Podgoretsky ©   (28.04.04 12:55) [14]

-))

Так вторая строка тоже может быть длиной 23...
И начинаться не с nov... я так понял, что nov - это ноябрь...


 
Anatoly Podgoretsky ©   (2004-04-28 12:59) [17]

Если довести дело до абсурда, то задача решения не имеет!

nov-01-vtg-diagnostichn
nov-01-vtg-diagnostichn
nov-01-vtg-diagnostichn

Вот здесь первая и вторая строки это одна строка, а третья это другая.


 
panov ©   (2004-04-28 13:10) [18]

>Anatoly Podgoretsky ©   (28.04.04 12:59) [17

ага!

Вот потому первое решение и есть рабочее для первоначально приведенных данных.


 
Tornado ©   (2004-04-28 13:26) [19]

ребята всем огромное спасибо, особенно >>panov ©   (28.04.04 13:10) [18]!

P.S. а "nov" - это от "Новгород", такая у нас принята система адресации в корпоративной почтовой системе Lotus ccMail


 
Андрей Сенченко ©   (2004-04-28 14:10) [20]

han_malign ©   (28.04.04 12:56) [15]

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

Anatoly Podgoretsky ©   (28.04.04 12:59) [17]

До абсурда эту задачу довести сложно, просто необходимо просмотреть все возможные виды переноса, желательно конечно иметь данные о максимальной длине строки.
Условно говоря в последнем приведенном решении не учтены всего-лишь 2 варианта
- перенос в 2 и больше строк
- сдвоенные фамилии типа novikov-zengelshuher, оказавшиеся в переносе.


 
Anatoly Podgoretsky ©   (2004-04-28 14:25) [21]

а если комбинация "nov-01-vtg-" в принципе не возможна для дополнительных строк, то задача сводитка к анализу if POS()=1 then первая строка else дополнительные строки. А сами строки как известно склеиваются оператором + или функцией concat.



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

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

Наверх





Память: 0.5 MB
Время: 0.058 c
1-1083337542
Bim
2004-04-30 19:05
2004.05.16
Помогите советом


14-1083167480
Yegorchic
2004-04-28 19:51
2004.05.16
Всё за бесплатно!


14-1083118645
slaw
2004-04-28 06:17
2004.05.16
Интерфейс под дос


6-1080652780
Новичёк
2004-03-30 17:19
2004.05.16
Использование буфера при ClientRead.


14-1083134788
syte_ser78
2004-04-28 10:46
2004.05.16
Помогите найти





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