Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.27;
Скачать: CL | DM;

Вниз

Не получается писать в файл.   Найти похожие ветки 

 
BigBadMutuh ©   (2003-01-17 19:04) [0]

Нужно записать в файл большой объём текста (>255 символов). WideString и AnsiString выдают ошибку. Попробовал разбить текст на части:

procedure TMain.HTML1Click(Sender: TObject);
var
C: integer;
F: TFileStream;
S: String;
begin
F:=TFileStream.Create("index.html",fmCreate);
F.Seek(0,soFromBeginning);
S:="Первый кусок текста";
F.Write(S,Length(S));
S:="Второй кусок текста";
F.Write(S,Length(S));
F.Free;
end;

Но даже если записывать только 1 слово, оно пишется в непонятной кодировке.
Вопросы:
1)Как можно записать сразу большой текст, не разбивая его на части?
2)Почему возникает проблема с кодировкой?


 
gsu ©   (2003-01-17 19:07) [1]

1. F.WriteBuffer(S,SizeOf(s));
2. файл то двоичный


 
gsu ©   (2003-01-17 19:08) [2]

для строк используй TStringList


 
BigBadMutuh ©   (2003-01-17 19:17) [3]

А можешь мне в коде исправить? А то я видимо опять что-то не так сделал...не компилится.


 
gsu ©   (2003-01-17 19:24) [4]

эх, код то правильный, делаешь не то, вот:
begin
var
F: TStringList;
S: String;
begin
F:=TStringList.Create;
S:="1 кусок";
F.Add(S);
S:="2 кусок";
F.Add(S);
f.SaveToFile("D:\index.html");
F.Free;
end;


 
Zmei-Gorin   (2003-01-17 20:00) [5]

и не будет работать...

procedure TMain.HTML1Click(Sender: TObject);
var
C: integer;
F: TFileStream;
S: String;
// для второго способа
i:integer;
begin
F:=TFileStream.Create("index.html",fmCreate);
F.Seek(0,soFromBeginning);
S:="Первый кусок текста";

//первый способ
F.Write(pchar(S),Length(S));

S:="Второй кусок текста";

//второй способ
for i:= 1 to length(s) do
F.Write(S[i],1);
F.Free;
end;



 
gsu ©   (2003-01-17 20:11) [6]

>> и не будет работать...
Уверен, проверь ка


 
mmm...mmm   (2003-01-17 20:18) [7]

В какой тип файла?
Судя по описанию TXT. А не проще ли обычными Writeln() или BlockWrite()?


 
BigBadMutuh ©   (2003-01-17 22:07) [8]

файл - index.html (судя по коду).Хотя может и проще, писать сначала в txt, а потом переименовывать его в txt. Правильно так будет?


 
BigBadMutuh ©   (2003-01-17 22:08) [9]

И ещё : можно ли как то сделать, чтоб не разбивать текст на куски, а то он большой...там кусков 10 будет...


 
TTCustomDelphiMaster ©   (2003-01-17 22:34) [10]

Все пишется, все работает...
var
F: TextFile;
s: string;
begin
s := StringOfChar("A", 600);
AssignFile(F, "c:\1.html");
Rewrite(F);
Writeln(F, S);
CloseFile(F);
end;


 
BigBadMutuh ©   (2003-01-17 22:38) [11]

2TTCustomDelphiMaster
Судя по help"у в результате мы получим букву "А" 600 раз. Это несколько не то что мне требуется :).


 
TTCustomDelphiMaster ©   (2003-01-17 22:41) [12]

В результате мы получим файл в который записана строка длинной 600 символов. Разве не это требуется?


 
BigBadMutuh ©   (2003-01-17 22:45) [13]

Требуется записать не одинаковые символы, а определённый текст.


 
TTCustomDelphiMaster ©   (2003-01-17 22:50) [14]

А че трудно присвоить переменной s текст?


 
BigBadMutuh ©   (2003-01-17 22:55) [15]

В этом случае Дельфя пожалуется, что переменная не может содержать более 255 символов.


 
BigBadMutuh ©   (2003-01-17 22:57) [16]

gsu, твой код работает, но очень хочется грузить весь текст одним куском.


 
E_Dimon ©   (2003-01-17 23:21) [17]

>В этом случае Дельфя пожалуется, что переменная не может содержать более 255 символов.
Да по-моему и String подойдет или PChar.

S:=Copy(.......)


 
BigBadMutuh ©   (2003-01-17 23:34) [18]

Я про стринг и говорю. Он врод не может содержать текст (заисключением одинаковых символов) длиннее чем 255 символов. Пробовал копировать туда больше - Дельфя ругается ;(. Впрочем уже сделал так, как советовал gsu.


 
Eraser@YYY   (2003-01-18 01:07) [19]

Ограничиваются по длине только паскаль-строки. String - логический тип зависит от директивы $H. По умолчанию String это динамически распределяемые масивы символов, тип AnsiString максимальная длина которых ограничивается только наличием памяти.


 
oomneeq ©   (2003-01-18 03:21) [20]

>Я про стринг и говорю. Он врод не может содержать текст (заисключением одинаковых символов) длиннее чем 255

Это круто!
"заисключением одинаковых символов"
Это круто!

Где такое вычитал?

Я без злобы,
Но почитывай хотя бы хэлп. Это даже быстрей сделать чем в форум вопрос запостить.

Успехов тебе!

но "заисключением одинаковых символов" - Это круто!


 
Юрий Зотов ©   (2003-01-18 06:46) [21]

> BigBadMutuh

Может... это... лучше книжки почитать, а не спорить? А то Вы тут, извините, ТАКОГО нагородили, что просто смешно. Жванецкий отдыхает.


 
TTCustomDelphiMaster ©   (2003-01-18 09:24) [22]


> В этом случае Дельфя пожалуется, что переменная не может
> содержать более 255 символов.


Не строковая переменная, а строковая константа. Если ты вставляешь текст в программу то делай так
s := "Строка длинной до 255 символов" + "Строка длинной до 255 символов";
Но лучше не извращайся, а читай из текст из файла.


 
Anatoly Podgoretsky ©   (2003-01-18 09:39) [23]

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


 
mate ©   (2003-01-18 10:13) [24]

> s := "Строка длинной до 255 символов" + "Строка длинной до 255 символов";

Ты уверен что это будет работать?
Я делал S:=...+...+..+...
при этом length(...+...+..+...)>>255
а затем
ShellExecute(..,open,Pchar(ss),...)
то появлялась ошибка о размере String не больше 255.


 
TTCustomDelphiMaster ©   (2003-01-18 10:29) [25]

Ну вы блин даете...


 
BigBadMutuh ©   (2003-01-18 11:51) [26]


String types
Type Maximum length Memory required Used for
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters, DBCS ANSI, MBCS ANSI, etc.
WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multi-user servers and multi-language applications
AnsiString, sometimes called the long string, is the preferred type for most purposes.

Вот это написано в help"е. Я это видел и видимо неправильно понял. При попытке использовать String, AnsiString или WideString Delphi очень громко ругалась, что я пытаюсь в неё запихнуть более 255 символов.
А про одинаковые символы я написал имея ввиду вот это
s := StringOfChar("A", 600); .

2AnatolyPodgoretsky
Книжка умная у меня есть. Читаю пока. А вы наверно перед тем как взяться за написание программ прочитали их штук 10. Помоему легче всего понять чтото на практике.


 
Anatoly Podgoretsky ©   (2003-01-18 12:22) [27]

Методом научного втыка :-)
Ну ну


 
BigBadMutuh ©   (2003-01-18 13:36) [28]

Без научного втыка никак. Также как и без теории. :)
Ответы на свои вопросы я получил. Прогу доделал. Всем спасибо.


 
gsu ©   (2003-01-18 13:42) [29]

так какого размера string ?
смотри, а то так и умрешь неучем (-:|~


 
BigBadMutuh ©   (2003-01-19 23:45) [30]

Умирать мне пока рано...

String это динамически распределяемые масивы символов, тип AnsiString максимальная длина которых ограничивается только наличием памяти.


 
Anatoly Podgoretsky ©   (2003-01-20 01:21) [31]

А если у тебя 3 гб?


 
diks ©   (2003-01-20 01:39) [32]

1: Почему тебе из файла не читается?
2: Кусков может и много но надежно!
3:i: TextFile;
s: string;
begin
s := StringOfChar("A", 600);
AssignFile(i, "c:\1.html");
Writeln(i, S);
CloseFile(i);
end;
Да побей ты его!


 
Батник   (2003-01-20 04:48) [33]

Почитай про тип STRING в Delphi - это не то что было в Pascal-e - это тип с управляемым временем жизни.

попробуй
F.Writebuffer(S[1],Length(S));






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

Текущий архив: 2003.01.27;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.017 c
3-86622
VID
2003-01-10 01:17
2003.01.27
Ограничения на значения вводимые в поля, на прогр. уровне


1-86873
Marsello
2003-01-20 08:37
2003.01.27
Базы данных InterBase


1-86913
Бук
2003-01-16 14:06
2003.01.27
Понять не могу где ошибка


7-87166
BJValentine
2002-11-05 16:07
2003.01.27
Автозагрузка


3-86688
Брат
2003-01-08 17:45
2003.01.27
IBQuery