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

Вниз

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

 
Александр1   (2004-08-25 06:51) [0]

Здравствуйте уважаемые мастера!
Имеется текстовой файл например 1.txt. В нём записаны несколько строк следующим образом:
1 строка

2 строка

3 строка

Каждая строка разделена пустой строкой (для удобства).
Необходимо считать все строки из файла и распихать их по разным редакторам Memo1, Memo2,  Memo3 соответственно.
Почему строки отделены между собой пробелом, потому что строка может состоять как бы из нескольких строк:

Текст 446486855765
Текст 87878778789789

Т.е. делить надо в том случае если есть пустая строчка!
Заранее спасибо за помощь!


 
YurikGL ©   (2004-08-25 07:34) [1]

что-то вроде

mas:array[1..3] of memo

t:=1

for i:=1 to общее количество строчек
 if i-я строчка="" then inc(t)
                   else mas[t].lines.add(i-я строчка)


 
КаПиБаРа ©   (2004-08-25 09:16) [2]


> Александр1   (25.08.04 06:51)  

А вопрос то какой? Что непонятно?


 
46_55_41_44 ©   (2004-08-25 09:34) [3]

Слушай напиши по понятней... Помогу!!!


 
Rem   (2004-08-25 09:37) [4]

[2]
 Неужели непонятно?
 Код ему нужен. Код...


 
Александр1   (2004-08-25 09:53) [5]

Чё вы всё демогогию разводите луче чего бы умного написали!


 
Александр1   (2004-08-25 09:58) [6]

А чё тут непонятно. В файле имеется  три абзаца. Нужно прочитать файл, а затем каждый абзац записать в отдельный редактор Memo. Границей между абзацами может служить красная строка или вообще лучше пустая строка. Вот и всё.


 
КаПиБаРа ©   (2004-08-25 10:04) [7]


> Чё вы всё демогогию разводите луче чего бы умного написали!

http://lleo.aha.ru/na/index.shtml


 
46_55_41_44 ©   (2004-08-25 10:12) [8]

AssignFile(F, "путь к файлу/1.txt");
Reset(F);
repeat
 readln(S);
 S := StringReplace(S, " ", "", rfReplaceAll );
 if S <> "" then
   Memo[i].Text := S; //сюда надо вставить, твои Memo или то  куда хочешь вставить
Until Eof(F);


 
Александр1   (2004-08-25 13:06) [9]

КаПиБаРа На этом сайте тебе не разрешают материться, так ты решил при помощи ссылки. Да небольшого ума ты. Ну да ладно, чё с д.... возьмёшь....


 
Андрей Сенченко ©   (2004-08-25 13:14) [10]

Александр1   (25.08.04 13:06) [9]

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

Нужен совет в непонятной ситуации - спрашивайте. Ответят.
Нужен готовый код ? Обсуждайте цену в "потрепаться".

Я думаю, что цена решения Вашей проблемы не потянет больше, чем на пару бутылок Миллера. Осилите ?


 
Александр1   (2004-08-25 13:58) [11]

Нет. Вы не правы сегодня просто плохой день и люди плохие на сайте сидят.
Завтра будет новый день и всё будет по другому. Ну если не завтра, то через месяц.


 
Александр1   (2004-08-25 14:00) [12]

Чё-то эта строчка не работает?
S := StringReplace(S, " ", "", rfReplaceAll );
К стати S- string Да?


 
begin...end ©   (2004-08-25 14:12) [13]


> [11] Александр1   (25.08.04 13:58)


> люди плохие на сайте сидят

Ты себя имеешь в виду?

> [12] Александр1   (25.08.04 14:00)


> S := StringReplace(S, " ", "", rfReplaceAll );

StringReplace(S, " ", "", [rfReplaceAll])

> К стати S- string Да?

Да. F1, кстати.


 
Rem   (2004-08-25 14:24) [14]

2 Александр1
 
 Слушайте! Идите книги по программированию читать! Быстро! И не суйтесь сюда до тех пор, пока не разберетесь, как минимум, с:
- Object Pascal [12];
- правилами поведения на форуме [9];
- русским языком [все остальное].

И пока не научитесь по-человечески вопросы задавать.

И пока не поймете, что это форум программистов, а не бесплатная онлайн справка для начинающих (дай Бог вам, с таким-то гонором, суметь начать!) с интеллектуально-предсказательными парсерами (в виде живых специалистов) ваших корявых вопросов!

Иначе [11] для вас не наступит никогда! Даже в следующей жизни...


 
Андрей Сенченко ©   (2004-08-25 14:26) [15]

Александр1   (25.08.04 14:00) [12]

Жмем на StringReplace комбинацию Ctrl-F1, читаем.

function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;


 
Александр1   (2004-08-27 14:33) [16]

Ну вот из за каких-то скобочек квадратных столько шума подняли.
Спасибо begin...end за помощь!
Я понимаю, что у вас есть ещё один повод на меня покричать, но всё равно деваться некуда.
Memo[i].Text := S; Не работает. Тут ведать чё-то с переменной i. Какого типа i. А может сдесь вообще массив нужен??????
Вы уж не ругайтесь сильно, помогите лучше добрые люди пожалуйста!!!!


 
Amoeba ©   (2004-08-27 14:39) [17]


> Александр1   (27.08.04 14:33) [16]

Memo в данном случае не объект класса TMemo, а массив таких объектов. А вот Memo[i] уже и будет собственно тем Memo, в которое вставляешь текст.


 
Александр1   (2004-08-27 14:51) [18]

Amoeba Ну да я так как раз и думал. Только как его теперь правильно описать??


 
Александр1   (2004-08-27 15:05) [19]

Я чё-то сколько не читал теорию по массивам, так ничего и не понял.
i: array[1..3] of Byte;
так что-ли?. Но чё-то не работает.
Массивы - это больная тема.


 
Amoeba ©   (2004-08-27 15:19) [20]


> Александр1   (27.08.04 15:05) [19]

Тогда обложись литературой по программированию и читай до полного просветления.

LMD


 
Александр1   (2004-08-27 16:08) [21]

Ну это та понятно. Ну а сейчас, та всё таки как на счёт i.


 
Александр1   (2004-08-27 16:33) [22]

И чё такое LMD??????????????


 
Amoeba ©   (2004-08-27 16:47) [23]


> Александр1   (27.08.04 16:33) [22]
> И чё такое LMD??????????????

LMD = Lamers must die


 
Андрей Сенченко ©   (2004-08-27 16:54) [24]

Amoeba ©   (27.08.04 16:47) [23]

Но с друго стороны DML ... может быть все-таки исправится ?


 
Александр1   (2004-08-27 17:10) [25]

Как мне и посоветовали я открыл книжку и вычитал там, что вроде как типы должны быть описаны так:
Memo: array [1..3] of Integer;
 i:Integer;
Но похоже не так, т.к. ничего не работает?
Помогите пожалуйста КАК ВСЁ ТАКИ НАДО?


 
Красный молоток   (2004-08-27 17:37) [26]

Memo: array [1..3] of Integer;
Так тебе чего надо-то? Массив TMemo или Integer?


 
Александр1   (2004-08-27 18:09) [27]

Понимаешь Красный молоток есть процедура

Memo: array [1..3] of Integer;
 i:Integer;

…….
procedure TForm1.BitBtn2Click(Sender: TObject);
var F:System.Text;
s:string;
begin
AssignFile(F, ExtractFilePath(Application.ExeName)+"vopr\1.vop");
Reset(F);
repeat
readln(S);
S := StringReplace(S, " ", "", [rfReplaceAll] );
if S <> "" then
  Memo[i].Text := S; //&#241;&#254;&#228;&#224; &#237;&#224;&#228;&#238; &#226;&#241;&#242;&#224;&#226;&#232;&#242;&#252;, &#242;&#226;&#238;&#232; Memo &#232;&#235;&#232; &#242;&#238;  &#234;&#243;&#228;&#224; &#245;&#238;&#247;&#229;&#248;&#252; &#226;&#241;&#242;&#224;&#226;&#232;&#242;&#252;
Until Eof(F);
end;

Но она не работает. Компилятор выдаёт ошибку на строчку   Memo[i].Text := S;
Ну это и понятно, она никак  не описана. Говорят надо заводить массив. Ну я сделал, но почему-то не работает.
Туго у меня с этими массивами. Помоги если можешь пожалуйста!


 
GrayFace ©   (2004-08-27 18:31) [28]

a:array[1..3] of TMemo;
a[1]:=Memo1;
a[2]:=Memo2;
a[3]:=Memo3;

У тебя можно заменить на это: (FindComponent("Memo"+IntToStr(i)) as TMemo).Text:=S;

И все-таки о морали: Если тебя послали на http://lleo.aha.ru/na/index.shtml, это не значит, что тебя оскорбили.


 
Александр1   (2004-08-27 18:47) [29]

Да я понимаю, что этот сайт не справочная система и что я уже наверное надоел своими глупыми вопросами. Но всё же:
a:array[1..3] of TMemo;
a[1]:=Memo1;
a[2]:=Memo2;
a[3]:=Memo3;
Пишет ошибку.
а – ещё надо как ни будь описывать?
И почему а, а где i.

А на счёт  http://lleo.aha.ru/na/index.shtml, я не обижаюсь. Я вообще в интернете редко на кого обижаюсь.


 
GrayFace ©   (2004-08-27 19:23) [30]

var a:array[1..3] of TMemo;
begin
 a[0]:= и т.д.


 
begin...end ©   (2004-08-27 19:31) [31]

> Александр1   (27.08.04 18:47) [29]

> Пишет ошибку.

Каков текст ошибки?


 
Александр1   (2004-08-27 19:44) [32]

А как же переменная i?

Уважаемый GrayFace!!! Чтобы мне тебя (вас) больше не мучить и себя не мучить, а то так к утру с ума можно сойти, да и вообще я пожалуй скоро забуду зачем я всё это затеял. Может напишите сразу конечный код от начала и до конца и тогда не будет больше проблем, скандалов и т.п.
ПОЖАЛУЙСТА!


 
begin...end ©   (2004-08-27 19:49) [33]

> Александр1   (27.08.04 19:44) [32]

> Может напишите сразу конечный код от начала и до конца

ИМХО, зря ты это сказал.


 
Александр1   (2004-08-27 19:55) [34]

Ну или помогите довести до ума этот!

var
 Form1: TForm1;

 a:array[1..3] of TMemo;
 i:integer;

implementation

{$R *.DFM}

procedure TForm1.BitBtn2Click(Sender: TObject);
var F:System.Text;
begin
AssignFile(F, ExtractFilePath(Application.ExeName)+"vopr\1.vop");
Reset(F);
repeat
readln(S);
S := StringReplace(S, " ", "", [rfReplaceAll] );
if S <> "" then
(FindComponent("Memo"+IntToStr(i)) as TMemo).Text:=S;
Until Eof(F);
end;

На форме находится Memo1, Memo2, Memo3.

Я не понимаю куда засунуть
a[1]:=Memo1;
a[2]:=Memo2;
a[3]:=Memo3;?????????? В цикл?


 
begin...end ©   (2004-08-27 20:09) [35]

> Александр1   (27.08.04 19:55) [34]

> (FindComponent("Memo"+IntToStr(i)) as TMemo).Text:=S;

Не совсем понятно, что это вообще там за i.

Тебе посоветовали: вместо того, чтобы писАть вот это:

(FindComponent("Memo"+IntToStr(i)) as TMemo).Text ,

писАть:

a[i].Text .

Удобнее, не правда ли?

a - это массив из компонентов TMemo.
Лучше, конечно дать ему более информативное название.
Например, MemoArray.
Но, сразу после того, как ты его объявил (var), элементы этого массива пусты, т.е. не содержат нужных тебе компонентов Memo.
Поэтому перед прогоном цикла массив надо заполнить.
Например, если у тебя на форме есть компоненты Memo1, Memo2 и Memo3, то можно написать так:

var
 MemoArray: array [1..3] of TMemo;
begin
 MemoArray[1] := Memo1;
 MemoArray[2] := Memo2;
 MemoArray[3] := Memo3;
end.

И теперь можно запускать цикл, и писАть:

MemoArray[I].Text := ...

Но ты должен как-то вычислять I !
Я не вижу, где ты это делаешь.

> куда засунуть

Много в последнее время таких желающих... Весной - я бы ещё понял... :-)


 
Александр1   (2004-08-27 20:39) [36]

Спасибо большое за разъяснения по поводу массивов!

MemoArray: array [1..3] of TMemo;
 i:integer;
 s:string;

procedure TForm1.BitBtn2Click(Sender: TObject);
var F:System.Text;
begin
MemoArray[1] := Memo1;
MemoArray[2] := Memo2;
MemoArray[3] := Memo3;

.AssignFile(F, ExtractFilePath(Application.ExeName)+"vopr\1.vop");
Reset(F);
repeat
readln(S);
S := StringReplace(S, " ", "", [rfReplaceAll] );
if S <> "" then
MemoArray[I].Text :=S;

Until Eof(F);
end;


> Но ты должен как-то вычислять I


Честно говоря я и сам не совсем понимаю как его вычислять.
Вот процедура. Описали массив, описали I, s. Заполнили массив. Открыли некий файл 1.vop для чтения. Прочитали его (readln(S)), а дальше я сам не понимаю чё такое
S := StringReplace(S, " ", "", [rfReplaceAll] ); - это должнобыть та функция которая разделяет строчки между собой? А MemoArray[I].Text :=S;, она же FindComponent("Memo"+IntToStr(i)) as TMemo).Text:=S; записывает их по разным Memo редакторам? Ну repeat – начать цикл, Until Eof(F); - повторять до тех пор пока не будет достигнут конец файла.
Файл ведь читается по строчно ли нет?

В файле записано следующее:

Привет Вася!
Привет Петя!

Как дела.

Хорошо.

Мне надо чтобы в программе получилось после прочтения файла: В Memo1 – Привет Вася! Привет Петя!, в Memo2 - Как дела.,
в Memo3 - Хорошо.


 
wnew ©   (2004-08-27 20:45) [37]

Александр1   (27.08.04 20:39) [36]
Саша, если Вам всего около десяти лет, то так и скажите. В этом случае люди с терепением отнесутся к Вашим выходкам. Но, если Вам около 15, то извините - Вы безнадёжны:(


 
begin...end ©   (2004-08-27 20:53) [38]

> S := StringReplace(S, " ", "", [rfReplaceAll] ); - это должнобыть та функция
> которая разделяет строчки между собой?

Должно быть, ты так и не удосужился посмотреть описание StringReplace в справке.
Читаем строку из файла (вот она - S !), если это - строка-разделитель (т.е. строка, состоящая из пробелов), то после удаления из неё пробелов с помощью StringReplace она будет пустой. Это мы и проверяем:

if S <> "" then... // Это была НЕ строка-разделитель

AssignFile(F, ExtractFilePath(Application.ExeName)+"vopr\1.vop");
Reset(F);
I := 1; // I - индекс нужного Memo в массиве
repeat
 ReadLn(S);
 S := StringReplace(S, " ", "", [rfReplaceAll]);
 if S <> "" then
   // Это не строка-разделитель, поэтому заносим её в Memo
   MemoArray[I].Text :=S
 else
   // Это - строка-разделитель. Поэтому её никуда не заносим, но учитываем,
   // что следующую строку надо заносить в следующий компонент Memo
   I := I + 1;
until Eof(F);

Только строку S загомачивать конечно, необязательно.
Лучше ввести дополнительную переменную String, в которую помещать результат StringReplace.

P.S. Полностью готового кода ты от меня не дождёшься/

P.P.S. И правда - сколько тебе лет?


 
добрый я   (2004-08-27 21:51) [39]

procedure TForm1.Button1Click(Sender: TObject);
const AnzahlMemo = 3; {колличество Memo на форме}
var Datei: TextFile;
   TmpStr: string;
   MatrixMemo: array[0..AnzahlMemo - 1] of TMemo;
   i, NumMemo: integer;
begin
 NumMemo := AnzahlMemo - 1;
 for i := ComponentCount - 1 downto 0 do
   if Components[i] is TMemo then
   begin
     MatrixMemo[NumMemo] := Components[i] as TMemo;
     Dec(NumMemo);
   end;

   if NumMemo < -1 then exit; {выход, если к-во Memo на форме больше, чем в AnzahlMemo}

 NumMemo := 0;
 AssignFile(Datei, "1.txt");
 Reset(Datei);
 try
   while not Eof(Datei) do
   begin
     ReadLn(Datei, TmpStr);
     if (Length(TmpStr) > 0) and
               ((TmpStr[1] <> "") or (TmpStr[1] <> " ")) then
       MatrixMemo[NumMemo].Lines.Add(TmpStr)
     else
      Inc(NumMemo);

     if NumMemo >= AnzahlMemo then Break;
   end;
 finally
   CloseFile(Datei);
 end;
end;

Внимание - эта строка не принандлежит коду! Задание у тебя странное. Для чего это нужно?


 
begin...end ©   (2004-08-27 21:55) [40]

> добрый я   (27.08.04 21:51) [39]

> Внимание - эта строка не принандлежит коду!

LOL



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

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

Наверх





Память: 0.55 MB
Время: 0.052 c
4-1091891488
Seldon
2004-08-07 19:11
2004.09.19
Как определить какой шрифт...


14-1087372396
Paul
2004-06-16 11:53
2004.09.19
Мастера Дельфи - Junior8


1-1094555012
begginers
2004-09-07 15:03
2004.09.19
browser


14-1093870819
Кирилл
2004-08-30 17:00
2004.09.19
Опрос


9-1084886879
istemy
2004-05-18 17:27
2004.09.19
Сферические координаты в OpenGL





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