Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

чтение из файла и проблема при его перезаписи [D7, XP]


gvozdkoff ©   (2012-01-18 14:02:00) 

Всем привет, такое вот дело.
Из sqliteбазы через запрос сохраняю данные в файл.
Результат запроса представлен одним столбцом.
Эти данные передаю в memo
А из memoсохраняю в файл.
memo1.Lines.SaveToFile('lat.txt');
Далее, читаю данные из этого файла и преобразовываю(ставлю разделитель между числами, например было 1234.5678 а делаю 12.345678).

var
   strltd:string;
LogF: TextFile;
begin
memo1.Clear;
       AssignFile(LogF,'lat.txt');
       Reset(LogF);
           While not EOF(LogF) do
           begin
           ReadLn(LogF,strltd);
           strltd:=Copy(strltd, 1, 9);
           strltd:=copy(strltd,1,2)+'.'+copy(strltd,3,2)+copy(strltd,6,4);
           while strltd[1]='0' do Delete(strltd,1,1);
           memo1.Lines.Add(strltd);
           memo1.Lines.SaveToFile('lat.txt');
           end;
end;

процесс не может получить доступ к файлу так как файл занят другим процессом.
Как я понимаю, это бывает если файл открыт уже, то есть результат запроса я сохранил в созданный файл, но затем файл не закрыл, но пытаюсь прочитать и перезаписать.
Господа как это исправить можно ?


gvozdkoff   (2012-01-18 22:22:00) [1]

Господа , большое спасибо за помощь и наставления ))


u4enik   (2012-01-18 18:51:00) [2]

Ega23 ©, ну вылизывать ему код самому прийдется.
я же показал как на его коде, что бы дошло..

ктому же понять что нужно очень тяжело

может ему нужно:

for i := 0 to SList.Count - 1 do   begin

SList.Strings[i]:= FloatToStr(  StrToFloatDef(SList.Strings[i],0)*100 );

end;


Ega23   (2012-01-18 18:12:00) [3]


> begin
>   strltd:=SList.Strings[i];
>   if system.length(strltd >= 9) THEN begin
>      strltd:=Copy(strltd, 1, 9);
>      strltd:=copy(strltd,1,2)+'.'+copy(strltd,3,2)+copy(strltd,
> 6,4);
>      while strltd[1]='0' do Delete(strltd,1,1);
>      SList.Strings[i]:= strltd;
>   end;
> end


Расстрелять.


u4enik   (2012-01-18 18:10:00) [4]

begin
  strltd:=SList.Strings[i];
  if system.length(strltd >= 9) THEN begin
     strltd:=Copy(strltd, 1, 9);
     strltd:=copy(strltd,1,2)+'.'+copy(strltd,3,2)+copy(strltd,6,4);
     while strltd[1]='0' do Delete(strltd,1,1);
     SList.Strings[i]:= strltd;
  end;
end


RWolf   (2012-01-18 15:01:00) [5]

а в чём затруднение-то? как в исходном коде делали со strltd, так и тут продолжайте с TempStr.


> L:=1;

SetLength(TempStr, 1);


gvozdkoff   (2012-01-18 14:49:00) [6]

Я конечно думал как вариант сохранить в другой файл )), но блин вроде как по нармальному хочется сделать


gvozdkoff   (2012-01-18 14:43:00) [7]

Господа, тяжеловато мне ))
Помогите советом и поправьте если что не так,
Вот моя логика

var
SList: TStringList;
TempStr: String;
i, L:integer;
begin
Slist:= TStringList.Create;            // собственно создаю стринглист
SList.LoadFromFile('lat.txt');         // загружаю данные из файла
for i := 0 to SList.Count - 1 do    // в общем считаем кол-во строк
         begin
         TempStr :=  SList.Strings[i];       //временная строка для опытов ))
         L := Length(TempStr);           //считаем кол-во символов в строке

end;
         SList.SaveToFile('lat.txt');
           finally
       SList.Free;
 

И на этом у меня тупик, надо например мне записать в файл только первый символ
L:=1;, не срабатывает


u4enik   (2012-01-18 14:17:00) [8]

совершенно верно, я просто подумал может memo видимое у него и нужны визуальные данные походу..


Ega23   (2012-01-18 14:11:00) [9]


> лучше читайте в мемо сразу


Зачем? Есть же TStringList, в конце-концов. Тем более, что TMemo именно его внутри и использует. Туда и читать и писать надо,


u4enik   (2012-01-18 14:08:00) [10]

лучше читайте в мемо сразу

memo1.lines.loadFromFile

далее пробегайтесь по строкам и корректируйте.

for i:=0 to memo1.lines.count-1 do begin

memo1.lines[i]:= mycorrect(memo1.lines[i]);

end;

и затем
memo1.lines.Save


Наверх

Титульная страница Поиск, карта сайта Написать письмо