Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизКак очистить строки (s1,s2:string)? Найти похожие ветки
← →
Катерина (2005-11-12 19:34) [0]Имеется произвольный csv-файл, написать программу для отображения содержимого файла в StringGrid.Вроде все работает,считывается правильно.Но если изменить исходный файл в блокноте не выходя из проекта,вернее удалить из него какие-то ячейки,то не работает все остается по-старому.по идее надо строки обнклить s1,s2.или может проблема в другом?Помогите пожалуйста!
вот программа для наглядности:
procedure TForm1.btnOpenClick(Sender: TObject);
var
f: TextFile;
S1, S2: string;
i, j, k: integer;
begin
i := 0;
k := 0;
if (OpenDialog1.Execute) then
Begin
s1 := " " ;{вот здесь загвоздка!}
s2 := " " ;{вот здесь загвоздка!}
StringGrid1.visible:=true;
AssignFile (f, OpenDialog1.Filename);
Reset(f);
while not eof(f) do
begin
ReadLn (f, S1);
Inc(i);
j := 0;
while Pos(";" , S1) <> 0 do
begin
s2 := Copy(S1,1,Pos(";", S1) -1);
Inc(j);
Delete (S1, 1, Pos(";", S1));
StringGrid1.Cells[j-1, i-1] := S2;
end;
if Pos (";", S1) = 0 then
begin
Inc(j);
StringGrid1.Cells[j-1, i-1] := S1;
end;
if k < j then k:=j;
StringGrid1.ColCount := k;
StringGrid1.RowCount := i;
end;
end;
CloseFile(f);
end;
← →
cvs (2005-11-12 20:36) [1]У меня всё работае нормально, вот файл cvs:
100;200;5;7;50;75;150
700;500;300;200;100;100;250
-100;;;;;;
test 55555555555555555555555555555555555555555555555555555555555555 ;;;;;;
ttt;;;;;;
ggggggggggg;;-2;;;;
ddddd;;;;;;
1910;;;;;;
ИСТИНА;;;;;;
;kkk;mmm;;;;
abc;1;2;;;;
ddd;3;4;;;;
;5;;;;;
test 55555555555555555555555555555555555555555555555555555555555555 ;;;;;;;
;ggg;;;;;;
;ddd;;;;;;
587;;;;;;;
;hhh;;;;;;
;;;"""---TEST--""";;;;
объединённые ячейки;;;;;;;
;;;;;;;
;;;;;;;
;;;;;;;
;;;;;;;
;;;;;;;;;;;;
;;;;;;;;;20.03.2003;11.09.2001;555;
;;;;;;;;;;;;
;;;;;;;;;;;;
;;;;;;;;;;;;
;;;;;;;;;;;;
← →
Virgo_Style © (2005-11-12 20:37) [2]По-моему, можно сделать немного проще:
StringGrid1.Rows[i].Delimiter:=";";
StringGrid1.Rows[i].DelimitedText:=S;
- и разбиение по колонкам произойдет автоматически.
Надо будет только читать строки и записывать их таким образом...
Попробуйте чистить StringGrid до записи, возможно, там остаются старые значения, хотя по идее - не должны.
← →
Virgo_Style © (2005-11-12 20:47) [3]Хм, проверил - после изменения и повторной загрузки все меняется как надо...
← →
Катерина (2005-11-12 20:58) [4]Надо открыть файл именно в блокноте и,не закрывая проект,изменять и сохранять файл.
← →
Virgo_Style © (2005-11-12 21:00) [5]Катерина (12.11.05 20:58) [4]
Так и делал - запустил, открыл программой, открыл в блокноте, изменил, сохранил, открыл программой.
← →
cvs (2005-11-12 21:08) [6]>Надо открыть файл именно в блокноте и,не закрывая проект,изменять и
>сохранять файл.
Всё равно работает нормально. Может дело в версии делфи? (У меня D3)
вот текст программы:
procedure TForm1.Button1Click(Sender: TObject);
var
f: TextFile;
S1, S2: string;
i, j, k: integer;
begin
i := 0;
k := 0;
if (OpenDialog1.Execute) then
begin
s1 := " ";
s2 := " ";
StringGrid1.visible := true;
AssignFile(f, OpenDialog1.Filename);
Reset(f);
while not eof(f) do
begin
ReadLn(f, S1);
Inc(i);
j := 0;
while Pos(";", S1) <> 0 do
begin
s2 := Copy(S1, 1, Pos(";", S1) - 1);
Inc(j);
Delete(S1, 1, Pos(";", S1));
StringGrid1.Cells[j - 1, i - 1] := S2;
end;
if Pos(";", S1) = 0 then
begin
Inc(j);
StringGrid1.Cells[j - 1, i - 1] := S1;
end;
if k < j then k := j;
StringGrid1.ColCount := k;
StringGrid1.RowCount := i;
end;
end;
CloseFile(f);
end;
← →
Катерина (2005-11-12 21:17) [7]да ну у меня же правда не работает!а если стереть ячейки так,чтобы в этой строке ячеек осталось меньше,чем в какой-либо другой,то остаток выводится.А как чистить StringGrid до записи?я просто писала s1:="";s2:="";
← →
Virgo_Style © (2005-11-12 21:37) [8]А, видимо, я понял, в чем дело. Если было
1;2;3;4;5
,
а потом стало1;2;3;4
,
то ячейка с "5" просто не будет очищаться. в общем, вот мое предложение на базе [2]:function DelimitersCount(S:String;Delimiter:char):integer;
var i:integer;
begin
Result:=0;
for i:=1 to Length(S) do
if S[i]=Delimiter then Inc(Result);
end;
procedure TForm1.Button2Click(Sender: TObject);
var S:TStrings;
i, items, maxitems:integer;
const Delimiter=";";
begin
if not OpenDialog1.Execute then exit;
maxitems:=1;
S:=TStringList.Create;
try
S.LoadFromFile(OpenDialog1.FileName);
StringGrid1.RowCount:=S.Count;
for i:=0 to S.Count-1 do
with StringGrid1 do
begin
Items:=DelimitersCount(S[i],Delimiter)+1;
if maxitems<Items then maxitems:=Items;
if ColCount<Items then
ColCount:=Items;
Rows[i].Delimiter:=Delimiter;
Rows[i].DelimitedText:=S[i];
end;
StringGrid1.ColCount:=MaxItems;
finally
S.Free;
end;
end;
← →
cvs (2005-11-12 21:56) [9]добавьте после
if (OpenDialog1.Execute) then
begin
StringGrid1.colcount:=0;
StringGrid1.rowcount:=0;
Вот теперь работает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c