Проверка строк и заполнение stringgrida
имеется текстовый файл с таким текстом:
Options: encoding = utf8, version=3
#FOLDER
ID=12
NAME=Opera
ON PERSONALBAR=YES
PERSONALBAR_POS=0
EXPANDED=YES
#URL
ID=13
NAME=Загрузка Opera
URL=http://www.opera.com/download/
VISITED=1198159316
#URL
ID=14
NAME=Сообщество Opera
URL=http://my.opera.com/
ICONFILE=my.opera.com.ico
ON PERSONALBAR=YES
PERSONALBAR_POS=1
#FOLDER
ID=15
NAME=Codenet
ON PERSONALBAR=YES
PERSONALBAR_POS=0
EXPANDED=YES
#URL
ID=16
NAME=Сайт Codenet
URL=http://www.codenet.ru/
VISITED=1198159316
Необходимо автоматически прочесать этот файлик и заполнить stringgrid
таким спсобом.
Если встречается слово: "#FOLDER" то добавляем новую строку в таблицу и указывается "ID", "Name". Если встречается "#URL" также или дописываем эту строку или вставляем новую строку и пишем "ID", "NAME", "URL".
Т.Е. программа должна записать в стрингрид следующее:
12|Opera |13|Загрузка Opera|http://www.opera.com/download/|
- | - |14|Сообщество Opera |http://my.opera.com/|
15|Codenet|16|Сайт Codenet|http://www.codenet.ru/|
Помогите, как это сделать???? :confused: сильно только не критикуйте, что мол "поисщи", "что у тебя рук нет?"
P.S. Заранее огромное спасибко :rolleyes:
[highlight=delphi]
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
FolderURLType = record
ID, Name, URL: string;
end;
procedure ReadURLFromFile(var f: textfile; var fdn: FolderURLType);
var
s: string;
begin
readln(f, s);
fdn.ID:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
readln(f, s);
fdn.Name:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
readln(f, s);
fdn.URL:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
end;
procedure ReadFolderFromFile(var f: textfile; var fdn: FolderURLType);
var
s: string;
begin
readln(f, s);
fdn.ID:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
readln(f, s);
fdn.Name:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
fdn.URL:='';
end;
var
f: textfile;
s: string;
fdn: FolderURLType;
begin
assignfile(f, 'c:\1.txt');
reset(f);
while not eof(f) do
begin
readln(f, s);
if s='#URL' then
ReadUrlFromFile(f, fdn)
else
if s='#FOLDER' then
ReadFolderFromFile(f, fdn)
else continue;
writeln(fdn.ID, ' ', fdn.Name, ' ', fdn.URL);
end;
close(f);
readln;
end.
[/highlight]
про тестировал и програ вываливается при записи: writeln(fdn.ID, ' ', fdn.Name, ' ', fdn.URL);
В чём может быть дело???
нет я не использовал его в консоле и т.д. сделал обычное приложение, записал процедуры и кнопку на запуск прочёсывания и всё!!!
а может ошибка возникать из-за того, что файл нами уже открыт, а тут он его хочет менять или нет???
Плиззз.
мда...
[highlight=delphi]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
FolderURLType = record
ID, Name, URL: string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ReadURLFromFile(var f: textfile; var fdn: FolderURLType);
var
s: string;
begin
readln(f, s);
fdn.ID:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
readln(f, s);
fdn.Name:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
readln(f, s);
fdn.URL:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
end;
procedure ReadFolderFromFile(var f: textfile; var fdn: FolderURLType);
var
s: string;
begin
readln(f, s);
fdn.ID:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
readln(f, s);
fdn.Name:=copy(s, pos('=', s) + 1, Length(s) - pos('=', s));
fdn.URL:='';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
f: textfile;
s: string;
fdn: FolderURLType;
begin
assignfile(f, 'c:\1.txt');
reset(f);
while not eof(f) do
begin
readln(f, s);
if s='#URL' then
ReadUrlFromFile(f, fdn)
else
if s='#FOLDER' then
ReadFolderFromFile(f, fdn)
else continue;
{распределяешь по ячейка stringgrid fdn.ID, fdn.Name и fdn.URL}
end;
system.close(f);
end;
end. [/highlight]
надеюсь stringgrid заполнить теперь сумеешь.
а хелп посмотреть или книжку почитать?
[highlight=delphi]
RichEdit1.Lines.Add('строка'); //добавить строку
[/highlight]
а для своего случая сам сообразишь