pierwszy znak

Widzisz odpowiedzi znalezione dla zapytania: pierwszy znak





Temat: Niezgodnosc typow (blad)

"WiteK" <witek@wp.plwrote in message



No dobrze, ale problem w tym ze nie wiem jak sprawdzic poprawność (czy
jest
to prawidlowa liczba) oraz jak dokonac konwersji. Moze to jest proste ale
jak juz mowilem jestem bardzo poczatkujacy :(. Prosze o jakies instrukcje.


    Może ten krótki przykład coś rozjaśni:

#include <stdio.h
#include <stdlib.h

int main(int argc, char* argv[])
{
    /* Bufor na wczytana liczbe. */
    char buffer[1024];
    /* Wczytana liczba. */
    long number;
    /* Pomocniczy wskaznik. */
    char* koniec;

     /* Wczytujemy liczbe jako napis. */
    scanf("%s", buffer);

    /*
     Konwertujemy liczbe zapisana w systemie
     dziesietnym w buforze na liczbe calkowita.
     Do zmiennej koniec jest wpisywany adres pierwszego
     znaku, ktory nie zostal przeksztalcony.
    */
    number = strtol(buffer, &koniec, 10);

    /* Sprawdzamy, czy konwersja sie udala. */
    if(*koniec != '')
        printf("Nie podales prawidlowej liczby! ");
    else
        printf("%ld ", number);


}


Pozdrawiam!
Marcin

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: ciąg znaków - wskaźnik co zmiennej typu char
Użytkownik euro2 <marte@box43.gnet.plw wiadomości do grup dyskusyjnych
napisał:9su9cm$1q@flis.man.torun.pl...


c = get_d(); // a nie c = get_d;

poza tym wszystkie te konstrukcje są pełne błędów. Np. wskaźnik d w
get_d()
jest zmienną lokalną, jaki sens go zwracać, jeśli ginie poza jej zasięgiem
(dostajesz ślepe wskazanie).


wskaznik ginie ale nie ginie wartosc na ktora on wskazuje


Również przypisania typu
d = "costam";
są niepoprawne, choć może dać się skompilować.


sa jak najbardziej poprawne, sam tekst "costam" jest ciagiem znakow
umieszczonym w jakims kawalku pamieci read only np segmencie danych
czy dodatkowym (zaden stos czy sterta), kawalek ten jest traktowany przez
kompilator jako const char *, nastepnie operator= przypisze adres pierwszego
bajtu do zmiennej d


Wskaźnik odnosi się do
konkretnego miejsca w pamieci, wiec przypisanie powyższe spowoduje że
wartością wskaźnika d będzie adres anonimowego ciągu "abcd" (nigdzie nie
rezerwujesz pamięci na tę zmienną).


w tym przypadku nic nie trzeba rezerwowac i wartoscia wskaznika nie bedzie
zaden anonimowy ciag


Wynika to stąd, że char* nie jest czymś
w rodzaju string w Pascalu, ale wskaźnikem do pierwszego znaku ciągu.


prawda, ale przeanalizuj ten prosty przyklad jeszcze raz

Tomek

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: problem z char *wsk


"o^hm" <greg@poczta.onet.plwrote in message



Zadanie proste ale jeszcze nie radze sobie w 100% ze wskażnikami,
dlatego prosze o pomoc.

char *wsk = {"jakis tekst"};
(można opuszcać klamry ????)


Przy pomocy takiej deklaracji jak powyzej tworzysz jednoczesnie
dwie rzeczy: statyczna tablice znakow "jakis tekst" oraz wskaznik
do pierwszego znaku z tej tablicy. Nazwa kazdej tablicy wskazuje
na adres jej pierwszego elementu, podobnie w tym przypadku, tylko
ze tu nazwą jest sama "definicja" statycznej tablicy. Klamerek nie
musisz stosowac, chyba ze dla przypomnienia, ze "jakis tekst" jest
tablicą :)

Na marginesie, zwroc uwage na okreslenie *statyczna* tablica.
To jest wazne, bo takich tablic raczej nie powino sie bezposrednio
modyfikowac - lepiej zrobic kopie, tak jak w przykladach kolegow.

Maciej

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Klawisze w Unixie
Hello Neurobasher


On 06-Cze-99, you wrote:
wcisnieto ESC... funkcje wlaczajaca i wylaczajaca mozemy zdefiniowac np. tak:


Zaimplementowalem (czytaj przepisalem :)) kod, ktory podeslales - dziala :)).
Mialem problem z ESC - ale sobie poradzilem :-))))). Jesli pierwszym znakiem
bylo 27 to ustawialem flage O_NONBLOCK (tak jak to bylo z O_NDELAY w twoim kodzie
:)), nastepnie zczytywalem znak i przywracalem poprzednie ustawienia. Problem
pojawil sie przy zczytywaniu drugiego znaku - zarowno "read" jak i "getch"
zawsze zwracaly "-1", dopiero jak uzylem "getchar" zadzialalo :).


jednakze cursesy chyba maja taka funkcje juz wbudowana...


W curses nie ma :( - jest w ncurses.

Regards

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: fieldbyname - pomoc


| Co oznacza pierwszy cyfra?
Indeks pierwszego znaku, druga to liczba znakow do skopiowania.

--
-------------------------------------
Aleksander Sztwiertnia


Dzięki wszystkim za wytłumaczenie i poszerzenie mjej wiedzy. :-))

Hubert

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Problem z DbEdit-ami
Witam, mam taki problem z DbEditami w D7 Ent ze wszystkimi zainstalowanymi
z Borlanda poprawkami.
Wrzucam na formę DateTimePicker oraz 2 DBEdity. Jeden przechowuje datę,
drugi przechowuje cokolwiek, np. dowolną liczbę.
Pobieram zawartość daty do pierwszego DBedita:

DBedit1.Text:=DateToStr(DateTimePicker(date));

Następnie chcę coś wpisać w DBedit2 ręcznie - i co się dzieje - po wpisaniu
pierwszego znaku w DBedit2 znika zawartość DBEdit1 !!!  

Potem już można bez problemu wpisać zawartość DBEdit1 jeszcze raz
wybierając datę z DateTimePicker-a i już jest OK. Tak nie może być,
ponieważ wypełnionych pól mam dużo i szlag mnie trafia, jak jakiś dbEdit
muszę zmodyfikować ręcznie. Wtedy wiem, że zaraz mi wszystko zniknie.

Debadżer nie wykazuje żadnej akcji, która mogłaby powodować znikanie tych
pól.
Nie mam ustawionych procedur onChange, onExit ani żadnych innych.
Wydawałoby się, ze właściwość AutoEdit powinna załatwić sprawę, jednak tak
nie jest.

Czy ktoś się z tym spotkał już kiedykolwiek, bo mi ręcę opadają?

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Problem z DbEdit-ami


Witam, mam taki problem z DbEditami w D7 Ent ze wszystkimi zainstalowanymi
z Borlanda poprawkami.
Wrzucam na formę DateTimePicker oraz 2 DBEdity. Jeden przechowuje datę,
drugi przechowuje cokolwiek, np. dowolną liczbę.
Pobieram zawartość daty do pierwszego DBedita:

DBedit1.Text:=DateToStr(DateTimePicker(date));

Następnie chcę coś wpisać w DBedit2 ręcznie - i co się dzieje - po wpisaniu
pierwszego znaku w DBedit2 znika zawartość DBEdit1 !!!  

Potem już można bez problemu wpisać zawartość DBEdit1 jeszcze raz
wybierając datę z DateTimePicker-a i już jest OK. Tak nie może być,
ponieważ wypełnionych pól mam dużo i szlag mnie trafia, jak jakiś dbEdit
muszę zmodyfikować ręcznie. Wtedy wiem, że zaraz mi wszystko zniknie.

Debadżer nie wykazuje żadnej akcji, która mogłaby powodować znikanie tych
pól.
Nie mam ustawionych procedur onChange, onExit ani żadnych innych.
Wydawałoby się, ze właściwość AutoEdit powinna załatwić sprawę, jednak tak
nie jest.

Czy ktoś się z tym spotkał już kiedykolwiek, bo mi ręcę opadają?


sory ze sie wcinam z pytaniem ale co zrobiłeś ze :

---Następnie chcę coś wpisać w DBedit2 ręcznie - i co się dzieje - po wpisaniu


pierwszego znaku w DBedit2 znika zawartość DBEdit1 !!! -----------


jak zrobić zebym mógł pisać w dbedit bo za nic nie mogę nic napisać tylko
słychać dzwięk

Pozdrawiam

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Problem z DbEdit-ami
Dnia 4 Jul 2006 15:43:27 +0200, robert napisał(a):

[...]


sory ze sie wcinam z pytaniem ale co zrobiłeś ze :

| ---Następnie chcę coś wpisać w DBedit2 ręcznie - i co się dzieje - po wpisaniu
| pierwszego znaku w DBedit2 znika zawartość DBEdit1 !!! -----------

jak zrobić zebym mógł pisać w dbedit bo za nic nie mogę nic napisać tylko
słychać dzwięk


DBedit jest powiązany z tabelą i z datasource - w końcu słowo Edit oznacza,
że tam można wpisywać dane. Być może masz tabelę tylko do odczytu.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Problem z DbEdit-ami


Rafał Kubiak wrote:
Witam, mam taki problem z DbEditami w D7 Ent ze wszystkimi zainstalowanymi
z Borlanda poprawkami.
Wrzucam na formę DateTimePicker oraz 2 DBEdity. Jeden przechowuje datę,
drugi przechowuje cokolwiek, np. dowolną liczbę.


DBedit nic nie przechowuje. DBEdit pokazuje bądź pozwala na edycję
danych z tabeli.


Następnie chcę coś wpisać w DBedit2 ręcznie - i co się dzieje - po wpisaniu
pierwszego znaku w DBedit2 znika zawartość DBEdit1 !!!


A nie są połączone z tym samym polem danych?

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: CheckBox w DBGridzie jako oznaczenie SelectedRows


Bartek Dajewski wrote:
Nie do stringów, tylko do tego, co wygeneruje komponent TDataSet. Zakładkę
raczej należy traktować jako wskaźnik do nieznanej bliżej zawartości. To, że
Delphi rezerwuje pamięć na zakładki tak samo jak na stringi nie zmienia
faktu, że nie przechowuje tam niczego, co miałoby coś wspólnego ze
stringiem.


A ja się upieram przy swoim. Zakładka to wskaźnik do pierwszego znaku w
"null-terminated string".
Jaka jest zawartość tego ciągu - to już inna bajka. Nam wystarczy, że
jednoznacznie identyfikuje rekord i BDE potrafi zrobić z tego użytek.
Tutaj uwaga: nie dla każdej tabeliquery można uzyskać stabilne
zakładki.


Bo to kosztuje pamięć i czas (pisałem o optymalizacji). Zamiana 32-bitowej
liczby na string to morderstwo i w przypadku optymalizacji pamięci i
wydajności.


OK. Ja jednak uważam, że zawsze należy założyć, iż zaznaczonych rekordów
będzie dużo. A poza tym jestem wygodny - StringList sam za mnie sortuje.
I nie muszę zwalniać każdego elementu z osobna przed zwolnieniem listy.


A w czym TStringList jest lepszy od TList (nie licząc szybkiego
wyszukiwania, o czym pisałem wcześniej)?


A może po prostu wykorzystać TBookmarkList?
Chociaż... zabawa z zakładkami robi się niebezpieczna np. przy zmianie
indeksu. Lepiej jednak zrobić to ręcznie.

Artur

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: CheckBox w DBGridzie jako oznaczenie SelectedRows
Cześć,

Artur Stuczynski napisał(a) w wiadomości:
<391FFA0B.BD530@blue.profex.com.pl...


Ależ ja nie kłócę się o to, czym jest string :)
BDE, aby zrobić skok do wybranego rekordu, musi dostać pewną wartość,
która jednoznacznie ten rekord identyfikuje.
Większa część BDE została napisana w C i stąd taka konwencja: wskaźnik
do pierwszego znaku, całość zakończona #0, żeby widzieć, gdzie się
kończy. To wszystko.
Zrób eksperyment: dla tabeli pdx z kluczem i indeksem ustawionym na ten
klucz, załóż zakładkę i wyświetl sobie zawartość "stringa", poczynając
od punktu, na który wskazuje zakładka, kończąc przed pierwszym
napotkanym #0.


---
Naprawdę nie chcę się spierać o słówka, ale to może kogoś wprowadzić w błąd.
Zakładka dla danej tabeli ma, w odróżnieniu od zmiennej PChar, zawsze tę
samą długość (rozmiar zajmowanej pamięci) i nie jest on zaznaczany #0 tylko
zwracany przez wirtualną metodę TTable.GetBookmarkSize (albo jakoś
podobnie). Całość nie jest zakończona zerem, bo jeżeli zawiera np. rekord,
to w nim #0 może wystąpić w dowolnym miejscu.

Wyniki eksperymentu:
(D3, tabela paradox, klucz typu LongInt, Bkm : TBookmark = GetBookmark)
   PChar(Bkm)^,20 = #0, #0, #0, #0, 'Ĺ°', #2, #0, #0, #12, #0, 'ˇ', #7, #0,
#0, #0, #0, ' ', #0, #0, #9
---
Pozdrawiam :-)
Bartek

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: cos w rodzaju dbgrida
Zna ktos moze jakis dzialajacy pod D5 darmowy komponent w rodzaju dbgrida
ktory umozliwia jedna rzecz: wyswietlanie pola mem w paru liniach?
Niepotrzebna mi jest zadna edycja czy inne bajery tylko samo wyswietlanie.
Sam umiem wyswietlic w zwyklym dbgridzie tekst z memo ale tylko w jednej
linni (np wyswietlam tylko do pierwszego znaku konca linii). Widzialem w
jakims programiku napisanym w Delphi ze da sie zrobic cos takiego ale nie
udalo mi sie znalezc jakiegos komponentu ktory to potrafi. Ewentualnie
moglby mi ktos powiedziec jak samemu mozna zrobic cos takiego? Z gory dzieki

GUZ

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: cos w rodzaju dbgrida

Zna ktos moze jakis dzialajacy pod D5 darmowy komponent w rodzaju dbgrida
ktory umozliwia jedna rzecz: wyswietlanie pola mem w paru liniach?
Niepotrzebna mi jest zadna edycja czy inne bajery tylko samo wyswietlanie.
Sam umiem wyswietlic w zwyklym dbgridzie tekst z memo ale tylko w jednej
linni (np wyswietlam tylko do pierwszego znaku konca linii). Widzialem w
jakims programiku napisanym w Delphi ze da sie zrobic cos takiego ale nie
udalo mi sie znalezc jakiegos komponentu ktory to potrafi. Ewentualnie
moglby mi ktos powiedziec jak samemu mozna zrobic cos takiego? Z gory


dzieki

Standardowy DBCtrlGrid nie może być?

Pozdrawiam ... Miroo

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Grupowanie w SQL
Witam

Dziekuje za odpowiedzi o funkcji CAST w LocalSQL.
Pojawil sie kolejny problem.
Jezeli zamienie Integer na String (funkcja CAST) i wytne pierwszy znak
(Substring) jest wszystko OK. A powiedzcie jak zrobic teraz grupowanie wg.
wycietego pierwszego znaku.

Zdrowko

Przemek
p.zakrzew@multispedytor.com.pl

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Grupowanie w SQL
Przemek Zakrzewski napisał(a):

Witam

Dziekuje za odpowiedzi o funkcji CAST w LocalSQL.
Pojawil sie kolejny problem.
Jezeli zamienie Integer na String (funkcja CAST) i wytne pierwszy znak
(Substring) jest wszystko OK. A powiedzcie jak zrobic teraz grupowanie wg.
wycietego pierwszego znaku.


Może tak:

SELECT DISTINCT(Pole) FROM ...

Można też:

SELECT pole as Nazwa FROM ... GROUP BY Nazwa

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: select-kiedy koniec
Czy mozna uzyskać informacje o zakończeniu select ?
W jaki sposób z selecta wyciągnąć informacje o znalezionych rekordach
dotyczących np nazwy firmy - konkretnie jej pierwszego znaku w nazwie
(tak żeby pó niej w TabControl odpowiednie zakładki z pierwszą literą nazwy firmy były nieaktywne
jesli nie ma zadnej firmy zaczynającej się od tej litery)
Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Filtrowanie w tabeli dBase
Cześć.

Mam taki problem.

Na formatce jest edit, do którego jest ustawione zdarzenie OnChange
takie, ze każde naciśnięcie klawisza powoduje filtrowanie w tabeli pod
względem dwóch kolumn.

Tabela.Filter:='NAZWA='+#39+edtSearch.Text
+#42+#39+#32+'or'+#32+'OPIS='+#39+edtSearch.Text+#42+#39

Wszystko ładnie pięknie chodzi tylko, że ja chciałbym filtrować wg
dowolnego ciągu znaków, niekoniecznie zaczynając od pierwszego znaku,
czyli tak:

Tabela.Filter:='NAZWA='+#39+#42+edtSearch.Text
+#42+#39+#32+'or'+#32+'OPIS='+#39+#42+edtSearch.Text+#42+#39

Próbowałem również Query
Query1.SQL.Add('SELECT * FROM Tabela WHERE Nazwa LIKE =
'+#39+'%'+edtSearch.Text+'%'+#39+' OR Opis LIKE =
'+#39+'%'+edtSearch.Text+'%'+#39;
Query1.Active:=True;

Ale to wogóle nie daje żadnych efektów

Poradźcie coś proszę.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Funkcja POS - czy jest optymalna?


Zadanie jest takie: odlalezc pozycje ciagu n znakow w ciagu o m-znakach.

Problemu nie ma: Pozycja := Pos(); i po sprawie.
Testowalem jednak te funkcje przy n=40 m=600 000 000 i wyniki nie sa
zadowalajace.
Nie posiadam zrodel (Delphi 5 std - 'gazetowa') POS'a i nie wiem jakim
algorytmem operuje sie w tej funkcji i czy ma sens pisanie wlasnej wersji
operujacej np KMP lub Boyer/Moor'em li to innych.


Witam

Algorytm Pos jest prosty:

1. najpierw sprawdza. czy n m; jeśli tak, to nie ma sensu sprawdzać dalej.
2. Następnie w ciągu m (od pozycji 1 do m-n+1) wyszukiwany jest pierwszy
znak z n. Jeśli tak, to nastepnie porównywanych jest n kolejnych znaków; gdy
i teraz nie będzie się zgadzać, to wyszukiwanie pierwszego znaku n
kontynuowane jest od pozycji różniącej ciąg n od badanego wcześniej podciągu
m.

Wniosek z tego taki, że jeśli zależy nam na szybkości, to warto napisać
własną funkcję Pos.

Pozdrawiam,
Chizra.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Funkcja POS - czy jest optymalna?
In article <ai2lq2$93@news.tpi.pl, chi@wp.pl says...


1. najpierw sprawdza. czy n m; jeśli tak, to nie ma sensu sprawdzać dalej.
2. Następnie w ciągu m (od pozycji 1 do m-n+1) wyszukiwany jest pierwszy
znak z n. Jeśli tak, to nastepnie porównywanych jest n kolejnych znaków; gdy
i teraz nie będzie się zgadzać, to wyszukiwanie pierwszego znaku n
kontynuowane jest od pozycji różniącej ciąg n od badanego wcześniej podciągu
m.


Hmmm, z tego opisu wynika ze jest to metoda mastodonta. I wnioskuje to
Pan na podstawie zrodel? Otrzymalem tresc Pos-a od grupowicza (za ktore
dziekuje), i bede musial przegryzc sie przez asm i wlasnie jestem na
etapie rozgryzania.


Wniosek z tego taki, że jeśli zależy nam na szybkości, to warto napisać
własną funkcję Pos.


Trzeba bedzie...

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: taka sobie aplikacja
Dnia 2004-03-08 11:46 użytkownik Juhas wspólnie i w porozumieniu z
klawiaturą, na szkodę ogółu, nastukał:


Nie chciałem tworzyć nowego wątku.
Ja z kolei jestem ciekawy jak działają aplikacje typu Easy Recovery.
Odzyskują usunięte z dysku pliki...


O ile się nie myle to usunięcie pliku polega na zmienienie pierwszego
znaku nazwy tego pliku na... (chyba tyldę). Wystarczy, że w FAT
poszukasz takich plików, sprawdzisz gdzie leżały ich kawałki, poskładasz
do kupy i jak nic nie było nadpisane to masz plik.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Zapis i odczyt pliku z danymi.
Dnia 2004-02-13 22:07 użytkownik Wodzu wspólnie i w porozumieniu z
klawiaturą, na szkodę ogółu, nastukał:


Witam,

Chcialbym utworzyc plik rekordowy ale taki aby znajdowaly sie w nim rekordy
roznych typow.
Np 50 rekordow zawierajacych pola typu integer i 25 rekordow zawierajacych
pola typu string.
Czy jest to mozliwe?
Jesli tak to prosilbym o krotki przyklad jak to zrobic...


1. Może użyj plików ini (TIniFile) ???

2. Taki format pliku:
<typ pola(np 1 bajt)
<dane
<typ pola(np 1 bajt)
<dane

Czyli np gdy TypPola = 0 to znaczy, że dalej jest Integer, jeżeli
TypPola=1 to znaczy, że dalej jest String (gdzie pierwszym znakiem -
pierwsze X bajtów zajmuje długość Stringa - żebyś wiedział ile
przeczytać)...

3. Uzycie rekordu (mało opłacalne - żre dużo miejsca i musisz znać max
długość stringu):

type
  TDana = record
   case Typ : Byte of
   0 : (Liczba : Integer);
   1 : (Tekst  : String[100]);
  end; //TDana

Problem w tym, że MUSISZ określić długość Stringa, no i zawsze ten
rekord będzie zajmował tyle ile największy podrekord !!! Tutaj, nie
ważne czy będziesz trzymał Liczbę czy Tekst to zawsze wielkość = 101
bajtów (100 na stringa i 1 na typ).

A zapisujesz do pliku jak zwykły plik : file of TDana;

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Konwersja ze string na array of char i odwrotnie
Dnia 12/29/2007 12:18 PM, Użytkownik zpksoft napisał:

Zadeklarowałaś T oraz S jako string,
po czym użyłaś instrukcji podstawienia.

Podobnie:
var i, j: integer;

i:=5;
j:=i;
inc(j);

ile jest i? (oczywiście 5 :)


var s, t : String;
      pc : PChar;
begin
s := 'Ala ma kota';  // wiadomo
pc := @s[1];         // zapamiętuje adres do pierwszego znaku w S
t := s;              // "kopiuje" tekst do t
pc^ := 'O';          // ustawiam wartość pierwszego znaku w S

showmessage(t);      // wyświetlam teoretycznie nie zmieniony tekst ;p
end;

Jaką wartość ma "t", którego formalnie nie zmieniałem i dlaczego nie
jest to już Ala? ;)

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Konwersja ze string na array of char i odwrotnie
dziobu pisze:
Dnia 12/29/2007 12:18 PM, Użytkownik zpksoft napisał:

Zadeklarowałaś T oraz S jako string,
po czym użyłaś instrukcji podstawienia.

Podobnie:
var i, j: integer;

i:=5;
j:=i;
inc(j);

ile jest i? (oczywiście 5 :)

var s, t : String;
     pc : PChar;
begin
s := 'Ala ma kota';  // wiadomo
pc := @s[1];         // zapamiętuje adres do pierwszego znaku w S
t := s;              // "kopiuje" tekst do t
pc^ := 'O';          // ustawiam wartość pierwszego znaku w S

showmessage(t);      // wyświetlam teoretycznie nie zmieniony tekst ;p
end;

Jaką wartość ma "t", którego formalnie nie zmieniałem i dlaczego nie
jest to już Ala? ;)

To skoro już zajmujemy się współdzielonymi instancjami zmiennych
lifetime managed, powtórzcie te same testy z *dynamicznymi* tablicami
array of char.

var
   s, t: array of char;

...

   SetLength(S, ...);

   ...

   T := S;

   ...

   T[0] := ....

   <wypisz s

Tu współdzielenie instancji jest już mniej ukryte, a sklonowanie
instancji trzeba wykonać jawnie za pomocą funkcji Copy.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Konwersja ze string na array of char i odwrotnie
On 29 Gru, 12:33, dziobu <kpawel@XXXkr.onet.pl wrote:

Dnia 12/29/2007 12:18 PM, Użytkownik zpksoft napisał:

Zadeklarowałaś T oraz S jako string,
po czym użyłaś instrukcji podstawienia.

Podobnie:
var i, j: integer;

i:=5;
j:=i;
inc(j);

ile jest i? (oczywiście 5 :)

var s, t : String;
      pc : PChar;
begin
s := 'Ala ma kota';  // wiadomo
pc := @s[1];         // zapamiętuje adres do pierwszego znaku w S
t := s;              // "kopiuje" tekst do t
pc^ := 'O';          // ustawiam wartość pierwszego znaku w S

showmessage(t);      // wyświetlam teoretycznie nie zmieniony tekst ;p
end;

Jaką wartość ma "t", którego formalnie nie zmieniałem i dlaczego nie
jest to już Ala? ;)

--
Pozdrawiam
Paweł Konarski
pawkon.ath.cx

Powinieneś sprawdzić
showmessage(s); a nie showmessage(t);,
bo ingerujesz w zmienną s (@s[1])

Paweł Krzyżanowski

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Ktory klawisz klikniety?

Witam

jest:

 TButton(FindComponent('Button' + IntToStr(BtnNo - 13)).Caption :=
OpenDialog.FileName;

powinno byc:

 TButton(FindComponent('Button' + IntToStr(BtnNo - 13))).Caption :=
OpenDialog.FileName;


No cóż, zjadłęm nawias, zdarza się.

nie dziala - cos tu jest skopane chyba
pierwsza sprawa to
co w ogole oznacza ta 7 ?


Proszę zobaczyć do helpa; drugi parametr funkcji Copy oznacza (o ile
pamiętam) indeks pierwszego znaku z łańcucha do skopiowania. Ponieważ
'Button' ma długość 6, więc od 7 znaku zaczyna się numer w nazwie przycisku.
A że nie działa - to co konkretnie wyskakuje?

Pozdrawiam,
Chizra.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Dwa Pos'y

cZe  dElFiArZe

p1 := pos('class="FBI"',tmp);
p2 := pos('CIA',tmp);

jak mam tak to "p2" od ktorej pozycji szuka ? od poczatku od 0
czy od aktualnej


1. Jeśli już to od 1 (nie 0) - od pierwszego znaku
2. Jeśli ituicja nie podpowiada to zawsze pozostaje
   sprawdzenie, które tez umiesz. Niby dlaczego inni
   mają odwalić robotę, którą też jesteś w stanie wykonać ???.

Tocbac.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Dwa Pos'y
[...]

1. Jeśli już to od 1 (nie 0) - od pierwszego znaku
2. Jeśli ituicja nie podpowiada to zawsze pozostaje
   sprawdzenie, które tez umiesz. Niby dlaczego inni
   mają odwalić robotę, którą też jesteś w stanie wykonać ???.


nie wcale bym nie chcial aby inni zamnie sprawdzali ale
moze ktos wlasnie wie

ps

czytajac posty nie ktorych osob
samemu mnie naszla niezmierna chec napisania
takiego glupiego coby za mnie inni odwalili czarna prace :)

.::::duch:::::........

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: sizeof(STRING) ? [D3]
Piotr 'Lodek' Hosowicz pisze:

Plonk pisze (w HTMLu+UTF oczywiście) :
[CIACH]
Przecież pisze, że interesuje go rozmiar a ten w kodowaniach
wielobajtowych może być zupełnie inny niż ilość przechowywanych
znaków.

A Ty czegoś się znowu uczepił ?
Zastanów się, od kiedy to zmienna typu _string_ może zawierać Unikody,
czy inne wielobajtowe wynalazki.

No, na upartego to chyba nawet i moze.


Na upartego - znaczy, że np. tak :
 - s[1] - pierwsza część pierwszego znaku
 - s[2] - druga część pierwszego znaku
 - itd...   ???
No bo jakoś żadna inna metoda mi nie przychodzi do głowy.

pozdr. Yankee

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: sizeof(STRING) ? [D3]

Na upartego - znaczy, że np. tak :
 - s[1] - pierwsza część pierwszego znaku
 - s[2] - druga część pierwszego znaku
 - itd...   ???

No nie, po prostu s[1] zwroci Ci cos co ma dwa bajty na ten przyklad, i
wlasnie dlatego length zwracajaca liczbe _znakow_ nie zwroci Ci wtedy
rozmiaru. O ile dobrze rozumiem.

Ale, afair, takie cuda unikodowe to siedza w WideStringach tylko. A tu
chodzi o String=AnsiString chyba.

pozdrawiam
pawel.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: sizeof(STRING) ? [D3]
Pawel Przewlocki pisze:

Na upartego - znaczy, że np. tak :
 - s[1] - pierwsza część pierwszego znaku
 - s[2] - druga część pierwszego znaku
 - itd...   ???
No nie, po prostu s[1] zwroci Ci cos co ma dwa bajty na ten przyklad, i
wlasnie dlatego length zwracajaca liczbe _znakow_ nie zwroci Ci wtedy
rozmiaru. O ile dobrze rozumiem.

Ale, afair, takie cuda unikodowe to siedza w WideStringach tylko. A tu
chodzi o String=AnsiString chyba.


Dokładnie - tu chodzi o zwykłego stringa, który nie ma nic wspólnego
z WideStringiem. I stąd te moje wszystkie pytania.

pozdr. Yankee

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: sizeof(STRING) ? [D3]

"Yankee" <pjank @ home.pl
A Ty czegoś się znowu uczepił ?
Zastanów się, od kiedy to zmienna typu _string_ może zawierać Unikody,
czy inne wielobajtowe wynalazki.
No, na upartego to chyba nawet i moze.
Na upartego - znaczy, że np. tak :
- s[1] - pierwsza część pierwszego znaku
- s[2] - druga część pierwszego znaku
- itd... ???
No bo jakoś żadna inna metoda mi nie przychodzi do głowy.


Dokładnie tak może być tyle, że Length podaje rozmiar mimo, że na zdrowy rozsądek powinno podawać ilość znaków a SizeOf podające rozmiar wewnętrznego wskaźnika jest po prostu zmaszczone, bo powinno zwracać ilość bajtów zajmowanych przez łańcuch tak jak robi to dla innych zmiennych.
Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: sizeof(STRING) ? [D3]

Yankee napisał(a) w wiadomości: ...

Pawel Przewlocki pisze:

Na upartego - znaczy, że np. tak :
 - s[1] - pierwsza część pierwszego znaku
 - s[2] - druga część pierwszego znaku
 - itd...   ???
No nie, po prostu s[1] zwroci Ci cos co ma dwa bajty na ten przyklad, i
wlasnie dlatego length zwracajaca liczbe _znakow_ nie zwroci Ci wtedy
rozmiaru. O ile dobrze rozumiem.

Ale, afair, takie cuda unikodowe to siedza w WideStringach tylko. A tu
chodzi o String=AnsiString chyba.

Dokładnie - tu chodzi o zwykłego stringa, który nie ma nic wspólnego
z WideStringiem. I stąd te moje wszystkie pytania.

Podejrzewam, że pytacz nawet nie wie, że na jeden
znak mogą być przeznaczone 2 bajty. Jemu chodzi po prostu
o liczbę znaków stringu, czyli Length, co podałeś.
Inaczej by pytał: "... a nie 9 (10 to błąd liczenia owiec)
czy 18 ?".

Pozdrawiam.

Tocbac.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Plik tekstowy TXT PILNE !!!

Witajcie!,

Czy ktoś może mi podpowiedzieć jak mogłbym pobrać z pliku TXT tylko
okresloną ilość znaków, tzn potrzebuję pobierać z pliku.txt  np. po 10
znaków (sprawdzam je i umieszczam w bazie) nazstępnie pobieram nastepnych
10
znaków i znowu sprawdzam i umieszczam w bazie itd..itd...

jak to zrobić??

Please help me!!

Pozdrowionka!!!


Użyj polecenia
Copy('jakis tam string',numer pierwszego znaku, ilosc znakow do
skopiowania);

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Porównywanie PChar'ów

Paweł Pawlak wrote:
Użytkownik Krzykacz Plamisty napisał:
| jak sprawdzić, ile
| miejsca zostało przydzielone dla PChar (skrót myślowy)?

Przy "konwersji" z PChar na String długość tego pierwszego jest
obliczana (do napotkania pierwszego znaku #0) -


[...]

OK, ale jest jakiś sposób, by obliczyć "rzeczywistą" długość? (patrz też
wyżej)


| Wem, ale chcę szybko porównać dwa ciągi znaków.

No to musiałbyś najpierw "zrobić" string o długości bufora i procedurą
Move przenieść zawartość bufora do tego stringa.


Teraz działa, tylko że chyba łatwiej będzie od razu wczytać dane do
string'a...

thx

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Porównywanie PChar'ów
Witam

Dnia 2002-08-20 17:54, Użytkownik Krzykacz Plamisty napisał:


Paweł Pawlak wrote:

| Użytkownik Krzykacz Plamisty napisał:

| jak sprawdzić, ile
| miejsca zostało przydzielone dla PChar (skrót myślowy)?

| Przy "konwersji" z PChar na String długość tego pierwszego jest
| obliczana (do napotkania pierwszego znaku #0) -

[...]

OK, ale jest jakiś sposób, by obliczyć "rzeczywistą" długość? (patrz też
wyżej)


Oczywiście, że jest. Liczy się bajty przed tym zerem. I nie ma innej metody.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Porównywanie PChar'ów


Sławomir Adamski wrote:
Witam

Dnia 2002-08-20 17:54, Użytkownik Krzykacz Plamisty napisał:
| Paweł Pawlak wrote:

| Użytkownik Krzykacz Plamisty napisał:

| jak sprawdzić, ile
| miejsca zostało przydzielone dla PChar (skrót myślowy)?

| Przy "konwersji" z PChar na String długość tego pierwszego jest
| obliczana (do napotkania pierwszego znaku #0) -

| [...]

| OK, ale jest jakiś sposób, by obliczyć "rzeczywistą" długość? (patrz
| też wyżej)

Oczywiście, że jest. Liczy się bajty przed tym zerem. I nie ma innej
metody.


Do tego służy length.
Ja pytałem o ilość bajtów przydzielonych dla PChar.

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Porównywanie PChar'ów
Użytkownik Krzykacz Plamisty napisał:


Sławomir Adamski wrote:

| Witam

| Dnia 2002-08-20 17:54, Użytkownik Krzykacz Plamisty napisał:

| Paweł Pawlak wrote:

| | Użytkownik Krzykacz Plamisty napisał:

| | jak sprawdzić, ile
| | miejsca zostało przydzielone dla PChar (skrót myślowy)?

| | Przy "konwersji" z PChar na String długość tego pierwszego jest
| | obliczana (do napotkania pierwszego znaku #0) -

| [...]

| OK, ale jest jakiś sposób, by obliczyć "rzeczywistą" długość? (patrz
| też wyżej)

| Oczywiście, że jest. Liczy się bajty przed tym zerem. I nie ma innej
| metody.

Do tego służy length.
Ja pytałem o ilość bajtów przydzielonych dla PChar.


1. jeśli sam przydzielasz ilość bajtów dla bufora, to wiesz, ile ich
przydzieliłeś

lub

2. funkcje (np. GetSystemDirectory, ReadFile) zwykle zwracają (czy to
jako wynik czy przez jeden z parametrów) ile bajtów wstawiły do
określonego bufora

PChar jest tylko wskaźnikiem na obszar pamięci. I to Ty musisz mu
przydzielić pamięć (np. przez GlobalAlloc), albo robi to wywoływana
funkcja (np. FormatMessage) i Ty też jesteś odpowiedzialny za zwolnienie
tego bufora.

Pozdrawiam,
Morris

Pozdrawiam,
Morris

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: Problem z EDBEditError

Olo napisał(a) w wiadomości: <7psi0s$98@sunsite.icm.edu.pl...


| czy OnUpdateData dla DataSource. Zawsze wyskakuje mi standardowe okienko
z
| informacją zamiast mojego.
hmmm... moze
try
except
?
Olo
ol@promail.pl


Jak najbardziej.
Ale jak i gdzie?
try   edit1.validate przy zdarzeniu OnExit z pola to już za późno.
W którym momencie sprawdzić czy pole jest dobrze wypełnione?
OnChange? Wówczas przy kazdym znaku wyskakuje mi mój komunikat (co jest
zrozumiałe, bo przy wpisywaniu pierwszego znaku wartość pola jest jeszcze
nieprawidłowa).
Proszę o dalsze wskazówki.

Z góry dziękuję.
Przemas pze@polbox.com
p.ze@phys.uni.torun.pl
P.S. Adres w 'reply to' to zupełna zmyła

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: PILNA POMOC POTRZEBNA
Dzieki  o to chodziło

  var a: string;
a:='Ala ma kota';
 ShowMessage(IntToStr(ord(a[1])));


| Prosze nocnych pisarzy o pomoc.
| Jak znależć kod ASCII pierwszego znaku ciągu tekstowego?

ShowMessage(IntToStr(ord(Edit1.Text[1])));

czyli funkcja "ord"


Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: String -> PChar jak zamienić?

"Martin Brzezinka" <martin_brzezi@hotmail.comnapisał(a):


Może nie programujesz w Delphi 3? Bo jest istotna różnica: Delphi 3 samo
alokuje pamięć dla PChar, co więcej, od wersji 3 nawet stary typ string
jest wskaźnikiem, automatycznie alokowanym przez kompilator.
Powyższy kod działa zupełnie bez zarzutu, jest to zwyczajny casting, jak
przy klasach.


Może nie programujesz w Delphi i dlatego piszesz bzdury ;-)

Proponuję analizę poniższego przykładu:

procedure TForm1.Button1Click(Sender: TObject);
var S:String;
    P:PChar;
begin
 // w Edit jest 'Edit1'
 S:=Edit1.Text;
 P:=PChar(S);
 ShowMessage(P);// 'Edit1'
 S[2]:='x';
 ShowMessage(P);// 'Exit1'
end;

W PChar jest przechowywany tylko WSKAŹNIK do pierwszego znaku stringa.

___________________________________________
Marcin Wieczorek ( T-1000 )
wiec@polbox.com www.polbox.com/w/wieczor
DELPHI FAQ http://www.kki.net.pl/t1000

Przeglądaj wszystkie wypowiedzi z tego tematu



Temat: String -> PChar jak zamienić?

arcin Wieczorek <wiec@polbox.comskrev i inlägg
<353ba923.24849@news.lodz.pdi.net...


Może nie programujesz w Delphi i dlatego piszesz bzdury ;-)
Proponuję analizę poniższego przykładu:      
[ C I A  C H ]
W PChar jest przechowywany tylko WSKAŹNIK do pierwszego znaku stringa.


Naturalnie. Może nie wyraziłem się ściśle. Chodziło mi o dwie rzeczy:

1. Zmiennej typu PChar nie potrzeba allokować na wzór C++, tak jak to
pisało parę osób, ponieważ Delphi robi to automatycznie, zwłaszcza przy
castingu.
Tak więc casting
zmienna_typu_PChar := PChar(zmienna_typu_string);
jest w pełni bezpieczny.

2. Zmienne typu string są od Delphi 3 przechowywane jako wskaźniki do
pierwszego adresu, podobnie jak PChar, z tym że nie kończą się #0, lecz
liczba znaków jest po staremu zakodowana w pozycji zerowej. Ponadto, w
pozycji -1 jest zakodowana liczba referencji. Jeśli kopiuje się string do
stringa, nie allokuje się nowej pamięci, tylko zwiększa się liczbę
referencji do danej zmiennej (zwiększa wartość znaku w pozycji -1 o jeden).
Oczywiście, to kompilator dba o to sam.
Dopiero, gdy próbuje się zmienić taki skopiowany string, jest on
automatycznie zaraz przed zmianą kopiowany w inne miejsce pamięci.

pozdrawiam,
mar@openinfo.se

Przeglądaj wszystkie wypowiedzi z tego tematu
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • klimatyzatory.htw.pl



  • Strona 4 z 4 • Zostało wyszukane 315 wypowiedzi • 1, 2, 3, 4