Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемма с POS 
:(
    Опции темы
JusTTaIReX
  Дата 12.5.2013, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.5.2013

Репутация: нет
Всего: нет



Проблема  вот в чем, написал цикл for, для заполнения многомерного массива. Нужно чтобы с блокнота он копировал строку и делил их на 4 части.
Пример:
слово;слово;слово;слово;

Всего строк 180.
Так вот при заполнении, функция Pos почему-то игнорирует 2,3 разделитель.

Код

procedure TSDIAppForm.Button5Click(Sender: TObject);
var
  I,J,L,pos1,pos2,r: Integer;
  k:string;
begin
setlength(verbs,strtoint(a),4);
L:=0;
for i := 1 to 1  do
begin
pos1:=0;
pos2:=0;
for j := 1 to 5 -1 do
begin
pos1:=pos1+L;
K:=(copy(words.Lines[1],pos1,ansipos(';',words.Lines[i])));
L:=length(K);
button2.Caption:=button2.Caption+inttostr(L)+' ';
verbs[i,j]:=copy(words.lines[i],pos1+1,L-1);
end;
end;

end;


Если что массив объявлен глобальным.
PM MAIL   Вверх
Beltar
Дата 12.5.2013, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 0
Всего: 7



У TStrings есть свойсто DelimitedText разбивающее строку по символу Delimeter.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
JusTTaIReX
Дата 12.5.2013, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.5.2013

Репутация: нет
Всего: нет



Beltar, а как мне его использовать?
PM MAIL   Вверх
Beltar
Дата 12.5.2013, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 0
Всего: 7



Присваиваешь ему входную строку, указав разделитель, у тебя, как я понял, ";", забираешь из TStrings готовые подстроки.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
northener
Дата 12.5.2013, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Beltar @  12.5.2013,  18:34 Найти цитируемый пост)
У TStrings есть свойсто DelimitedText

Только не TStrings, а TStringList


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
JusTTaIReX
Дата 12.5.2013, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.5.2013

Репутация: нет
Всего: нет



Beltar,  northener,  такая проблема весь текст лежит в мемо. 
PM MAIL   Вверх
Beltar
Дата 12.5.2013, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 0
Всего: 7



И лекция по абстрактным классам в нагрузку.

Добавлено через 12 минут и 5 секунд
У Мемо есть свойство Lines.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Данкинг
Дата 12.5.2013, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Поиск по форуму "getwordcount"...


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
northener
Дата 13.5.2013, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Beltar @  12.5.2013,  19:22 Найти цитируемый пост)
И лекция по абстрактным классам в нагрузку.

Кстати. Абстрактных классов в Дельфи не так уж и много. smile


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
JusTTaIReX
Дата 13.5.2013, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.5.2013

Репутация: нет
Всего: нет



Может кто нибудь на моем коде показать  свойсто DelimitedText? а то я умудрился по буквам поделить х)
PM MAIL   Вверх
northener
Дата 13.5.2013, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Код

var
  StL : TStringList;
  I : Integer;
...
  StL:=TStringList.Create;
  try
    StL.Delimiter:=';';
    StL.DelimitedText:=Memo1.Lines[0];
    for I:=0 to StL.Count-1 do ShowMessage(StL[I]);
  finally
    StL.Free;
  end;



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Poseidon
Дата 13.5.2013, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Text:= 'слово;слово;слово;слово;';
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  verbs: array of array of string;
  i,j: Integer;
  str: TStringList;
begin
  str:= TStringList.Create;
  try
    SetLength(verbs, Memo1.Lines.Count, 4);

    for i:= 0 to Memo1.Lines.Count-1 do
      begin
        str.Delimiter:= ';';
        str.DelimitedText:= Memo1.Lines[i];

        for j:= 0 to 3 do
          verbs[i,j]:= str[j];
      end;
  finally
    str.Free;
  end;
end;


Добавлено через 55 секунд
northener опередил smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
JusTTaIReX
Дата 14.5.2013, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.5.2013

Репутация: нет
Всего: нет



Poseidonnorthener,  спасибо) работает) а можно сделать чтобы он строку делил на подстроки только если встретит ';'? а то если натыкается на пробел то делит ее.

Это сообщение отредактировал(а) JusTTaIReX - 14.5.2013, 09:29
PM MAIL   Вверх
DarkProg
Дата 14.5.2013, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 4
Всего: 19



Цитата

   только что значит List index out of bounds (4)?
   

Это значит что происходит попытка обращения к элементу 4, который в списке не существует.


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
northener
Дата 14.5.2013, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(JusTTaIReX @  14.5.2013,  09:19 Найти цитируемый пост)
 можно сделать чтобы он строку делил на подстроки только если встретит ';'? а то если натыкается на пробел то делит ее.

Если в тексте могут встречаться пробелы, значит исходная строка должна выглядеть например так:
слово;"второе слово";слово;"четвертое слово";
И обратите внимание на свойство TStringList.QuoteChar.

Это сообщение отредактировал(а) northener - 14.5.2013, 13:13


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.