Čuste.
Snažím sa odfiltrovať z vstupu tabulátor a nahradiť ho medzerami.
Ide o ANSI C99.
Problém je v tom, že neviem kolkými medzerami ho mám nahradiť.
Niekedy keď stlačím tabulátor spraví to medzeru o 8 znakoch, niekedy 4 a niekedy zas 6.
Čo s tým? Ako zistím tú velkosť? Alebo aspoň vysvetlenie?
Fórum › C / C++
Počet medzier na jeden tabulátor
#1 Tango
Niekedy keď stlačím tabulátor spraví to medzeru o 8 znakoch, niekedy 4 a niekedy zas 6.
To přece záleží na programu (editoru), jak tabulátor vyhodnotí...
Vyšší textové editory navíc tabulátor nenahrazují, ale nechají ho tak...
Takže si nejdřív ujasni, co vlastně chceš dělat a pak řeš co čím nahrazovat...
Tak opakujem, chcem z getchar vymeniť '\t' pomocou viacerých medzier.
Tu nejde o žiadny textový editor.
Keď píšem riadky v skompilovanom programe, tak po stlačení tabulátora ma povedzme presunie o štyri medzery (opticky)..
V ďalšom riadku ma už ale môže posunúť o 8.
#7 Tango
Tady nedostaneš rozumnou odpověď, dokud nenapíšeš, k čemu to vlastně potřebuješ. Tabulátor může mít mnoho významů od zanedbatelného bílého znaku až po nedílnou součást syntaxe některých jazyků. Pokud ho chceš jen nahradit posloupností mezer, klidně si definuj svá vlastní pravidla.
#7 Tango
Keď stlačím tabulátor, neposunie ma o 8, alebo tak, ale na pozíciu na ktorej v predošlom riadku nie je prázdny znak.
Nepsal jsem náhodou prakticky totéž?
Programátorské editory většinou vkládají místo tabulátoru tolik mezer, kolik je potřeba na posun na začátek dalšího slova/bloku podle předcházejícího řádku...
Nevidím ti na obrazovku, na čem zrovna děláš ani jak si představuješ, že to má fungovat... Z toho, cos tu popsal se to poznat nedá... Ale pokud se to má chovat jako programátorský editor, tak už sis vlastně odpověděl sám...
#3 JoDiK
Programátorské editory většinou vkládají místo tabulátoru tolik mezer, kolik je potřeba na posun na začátek dalšího slova/bloku podle předcházejícího řádku...
Takové chování by se mi moc nelíbilo. Zvykl jsem si na odskakování po každé 4. pozici. Výhodou je, že pokud se tabulátor používá systematicky, každému z nás se ten zdroják zobrazí podle jeho pravidel. Nechápu pravidlo, že se tabulátor má nahrazovat mezerami, ale když to někdo potřebuje, tak mu tam ty mezery dám.
Při psaní programu se však formátováním a zalamováním nezabývám, vše nechávám na editoru.
Nepochopili ste ma..
Skúsim ešte raz vysvetlenie zahŕňajúc príklad.
Výsledná konzolová aplikácia vytvorená v CodeBlocks editori po stlačení TAB ('\t') reaguje tak, že opticky nedáva tabulátoru vždy rovnaké miesto.
Napíšem: ASD'\t'ASD a môže byť medzi nimi medzera na 10 znakov..
Napíšem: ABCddd'\t'ABC a môže byť medzi nimi medzera štyri znaky.
Tu som spravil príkladný kód:
#include <stdio.h>
#define AND &&
#define OR ||
int main(void)
{
register int i, c;
int predkoncom = 0;
char pole[1000];
printf("Poprosim nepouzivat tabulator.\a\n");
while (1)
{
for (i = 0; i < 1000; i++)
pole[i] = '\0';
for (i = 0, c = getchar(); i < 1000, c != '\n'; c = getchar(), i++)
pole[i] = c;
for (i--; pole[i] != '\0'; i--)
if ((i != 0) AND (i % 80 == 0))
predkoncom = 1;
else if (predkoncom AND (pole[i] == ' '))
pole[i] = '\n', predkoncom = 0;
for (i = 0; pole[i] != '\0'; i++)
if (pole[i] == '*')
return 0;
else
putchar(pole[i]);
putchar('\n');
}
return 0;
}
Funguje tak, že číta vstup až do napísania hviezdičky. Ak sa nachádza nejaké slovo medzi riadkami, tak ho posunie na nový riadok. Klasická vec čo robí word.
Problém je v tom, že nemožno kontrolovať tabulátory, pretože tabulátor nezaberie vždy rovnako miesta, takže ho neviem nahradiť napríklad štyrmi medzerami...
Skúste si to napríklad napísaním viacerých tabulátorov a viacerých znakov a uvidíte, že to zaberie povedzme 5 riadkov, ale stále to bude menej než 80 znakov. Keďže neviem kolko optických medzier zaberá jeden tabulátor, neviem ho za medzery vymeniť.
#14 Tango
Opravdu jsme nepochopili a dokud nepopíšeš čeho chceš dosáhnout ani nepochopíme.
mal by zahýbať slová tak ako to robí word
Jako že to má třeba zarovnávat do bloku (obě strany) vkládáním mezer mezi slova?
Keďže neviem kolko optických medzier zaberá jeden tabulátor, neviem ho za medzery vymeniť.
Možná bude teda problém v tom, že jsi nepochopil, jak funguje tabulátor ve vyšších textových editorech...
Tam přece nepřeskakuje nějaký daný počet mezer, ale skáče na nejbližší přednastavenou pozici. Ta může být daná buď výchozím krokem, nebo tabulační značkou (zarážkou) nebo pozicí začátku ostatních řádků u předsazeného textu.
Nebo-li, pokud pořádně nevysvětlíš co chceš, není ti rady ani pomoci...
Chápeš to, ide o to, aby som nahradil tab medzerami..
Lenže tu nejde o vyššie textové editory..
Dal som hore kratky kod, na ktorom si to môžeš odskúšať - ono to automaticky zarovnáva aj pri C99 výslednej aplikacii, akoby ten compiler mal prístup k aplikácii po vytvorení.
#16 Tango
Teď už ti nerozumím vůbec, nechápu co ta věta znamená:
ono to automaticky zarovnáva aj pri C99 výslednej aplikacii, akoby ten compiler mal prístup k aplikácii po vytvorení
ten příklad cos sem dal pokud můžu soudit nic nezarovnává, ani neupravuje, jen ukončuje řádky na úrovni slov tak, aby nebyly delší než 80 znaků. Jestli to má dělat jenom toto, tak prostě nahraď tabulátor jednou mezerou, fakt nevím co řešíš...
ten příklad cos sem dal pokud můžu soudit nic nezarovnává, ani neupravuje, jen ukončuje řádky na úrovni slov tak, aby nebyly delší než 80 znaků.
Prepáčte, nevedel som sa vyjadriť, ale myslel som toto.
No a tu je ten problém.
Nahradiť tabulátor jednou medzerou nemôžem, to už by nemalo rovnakú grafickú úpravu.
Ale asi máš pravdu, to je najrozumnejšie.
Kašlem na nejakú zložitú úpravu.. Skrátka tam nepovolím použitie tabulátora.
#18 Tango
Tabulátory běžně používám, ale nechávám editor, aby zdroják odsazoval tak, jak se odsazovat má a nekecám mu do toho. Dělá mi i mezery kolem operátorů, zalamování dlouhých řádek, hlídá mezery za čárkami, kolem závorek,... Nemám tedy potřebu vytvářet podobné nástroje.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Pocet slov oddelenych lubovolnym poctom medzier — založil Orava ON
JLabel tabulator — založil frno.frno
Tabulátor - doplnění proměnné — založil RePRO
Vynechanie medzier pri citani suboru — založil Java
Corel draw x6 posuvanie medzier medzi pismenami — založil Ondro
Moderátoři diskuze