Форум: "Основная";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
ВнизНе получается писать в файл. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.057 c