Konvertera tabbar till blanksteg?

Permalänk

Konvertera tabbar till blanksteg?

Hej!

Är det någon som vet hur man kan konvertera tabbar till blanksteg? Är det möjligt att göra i Notepad++ eller behöver man något annat program?

Tack på förhand!

Visa signatur

"Good teaching is one-fourth preparation and three-fourths pure theatre."—Gail Godwin
Sweclockers BB kod
0101001101000111

Permalänk
Medlem

Notepad++ fixar det som en barnlek!

Permalänk
Medlem

Finns en fullösning som fungerar i typ alla program annars; seek and replace...

Visa signatur

Stationär: Intel-baserad, Arch + KDE
Bärbar: Dell XPS 13, Arch + KDE

Permalänk
Medlem
Skrivet av Talavis:

Finns en fullösning som fungerar i typ alla program annars; seek and replace...

Men det fungerar inte för att ersätta tabbar med space, eftersom en tab kan ta upp 1..n tecken. Då måste man ta med tabbarnas "bredd" i beräkningen.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem
Skrivet av Phod:

Men det fungerar inte för att ersätta tabbar med space, eftersom en tab kan ta upp 1..n tecken. Då måste man ta med tabbarnas "bredd" i beräkningen.

En tab är alltid en tab och en tab innehåller ingen som helst information om hur bred den är. Bara ladda textfilen i Python eller liknande och köra textfil.replace("\t", " "), för att ge ett exempel på hur man kan göra. Alla texteditorer som är av någon som helst använding för programmerare har sådant här inbyggt, så jag antar att även Notepad++ har det, har dock ingen aning om hur då jag inte har Windows.

Enligt någon på stackoverflow gör man såhär i Notepad++:
TextFX -> TextFX Edit -> Leading spaces to tabs or tabs to spaces

Permalänk
Medlem
Skrivet av hhnrk:

En tab är alltid en tab och en tab innehåller ingen som helst information om hur bred den är.

Fel. Hela poängen med tabb-tecknet är ju att tabbar försöker matcha varandra:

text A % Tabb separerar text och A mertext B % Tabb separerar mertext och B

Permalänk
Medlem
Skrivet av You:

Fel. Hela poängen med tabb-tecknet är ju att tabbar försöker matcha varandra:

text A % Tabb separerar text och A mertext B % Tabb separerar mertext och B

Det där är ju dock inte bundet till själva texten på något sätt, utan är mer en resultat av hur texteditorn du öppnat texten i väljer att visa tabbar. Därför kan du, om du formaterar text med tabbar istället för mellanslag, aldrig vara säker på att det kommer se korrekt ut i någon annan texteditor (såvida inte tabbarna endast återfinns i början på varje rad).

Om man vet hur många mellanslag en tab motsvarar kan man lätt skriva någon liten kodsnutt som automagiskt byter ut tabbar mot mellanslag.

Allt detta förutsätter för övrigt att det inte är .doc eller liknande som vi pratar om, för där skulle det inte förvåna mig alls om varje tab innehåller en hel drös trist skit.

Permalänk
Medlem

För skojs skull, samt för att få in lite programmering i tråden, så skrev jag ett litet Python-script som gör om tabbar till space. Har inte utfört några uttömmande tester, men gjorde ett litet testdokument som den lyckades konvertera alldeles prima.

import sys def tabs_to_spaces(line, tabwidth=4): retval = "" count = 0 for letter in line: if letter != "\t": retval += letter count += 1 else: if count < tabwidth: retval += " " * (tabwidth - count) count += tabwidth - count else: retval += " " * (tabwidth - (count % tabwidth)) count += tabwidth - (count % tabwidth) return retval if __name__ == "__main__": if len(sys.argv) != 3: print("Usage: python tab_to_space.py TABWIDTH filename.ext") sys.exit(-1) tabwidth = int(sys.argv[1]) filename = sys.argv[2] with open(filename, "r") as infile: with open("_%s" % filename, "w") as outfile: outfile.write("".join([tabs_to_spaces(line, tabwidth) for line in infile.readlines()]))

Permalänk
Medlem

ruby -pi.bak -e "gsub(/\\t/,' ' * 8)" [file]...

Permalänk
Medlem
Skrivet av zyk:

ruby -pi.bak -e "gsub(/\\t/,' ' * 8)" [file]...

Det där löser ju dock bara problemet om du förutsätter att tabbarna alltid är lika breda.