Hallo , Ich habe Daten Zeilenweise in einer normalen .txt Datei nun möchte ich jede Zeile dieser .txt Datei in einen eigenen Sektor der SD-Karte schreiben (ein Sektor 512 Byte) . Gibt es dafür ein Tool ? Denn jede zeile von Hand mittels Hex-Editor in einen eigene Sktor zu kopieren ist sehr umständlich. Liebe Grüße Hermann
Ich nehme mal an hier kommt keine Antwort, weil die Fragestellung bei jedem der sie liest und nicht Gedanken lesen kann erst mal 1000 Gegenfragen aufwirft! Auf welchem System wurde die Textdatei erstellt? PC oder uC? Befinded sich die Text-Datei auch schon auf der SD-Karte? Auf welchem System willst Du die Sektoren erstellen? PC? Win? Linux? uC? Wie bestimmst Du die Sektoren? Sollen die innerhalb einer Datei liegen? Muss FAT heile gelassen werden - sprich soll die SD-Karte anschließend noch von einem PC lesbar sein? In Linux dürfte das ganze am einfachsten gehen. Ein wenig XARGS, AWK, DD und schon ist die Text-Datei auf Sektoren verteilt aber FAT kaputt ;o) PC - Einfach ein Programm schreiben, das dir aus der Txt-Datei eine *.DAT oder *.RAW oder wie Du sie auch nennen willst erzeugt. Lese Zeile, schreibe Zeile + (512-Zeilenlänge). Dateien fangen immer bündig mit einem Sektor an. Das heißt durch das auffüllen landet jede Zeile in einem eigenen Sektor wenn man die Datei dann auf die SD kopiert. Wenn die SD-Karte leer ist (frisch formatiert), dann sind die Sektoren auch aufsteigend. Vorteil: die FAT bleibt ganz. uC - jegliche Lib zum Zugriff auf eine SD-Karte sollte auch einen low-level-Part haben, der auf Sektoren zugreift.
auf dem PC(Win7) wird die textdatei erstellt . Nein die Textdatei befindet sich nicht auf der sd karte . Die Sektoren sind auf dem PC erstellt und FAT muss nicht heil bleiben da die Sektoren nurmehr vom µC ausgelesen werden müssen . Ich will nur vom PC(Win7) direkt auf die SD Karte (ohne FAT) zeile für zeile dieser Textdatei in einen eigenen Sektor kopieren ,ohne es von hand zB mit einem hexeditor machen zu müssen. Das ganze dient dazu das ich mit dem µC dann diese daten Sektorweise auslesen kann.
Wieso nimmst Du nicht einfach die FAT Bibliothek von Elm Chan auf dem µC, dann hast Du damit gar kein Problem? Alternativ schreib doch die Daten mit dem µC(über RS232 vom PC) auf die SD-Karte. Gruß Thomas
Hermann schrieb: > ohne es von > hand zB mit einem hexeditor machen zu müssen. Warum nicht von Hand? Wie viele tausend SD-Karten möchtest du denn beschreiben? Ich würde es so machen: 1. Zeilen auffüllen (mit einem Script in der Sprache deiner Wahl) 2. mit HxD auf die SD Karte kopieren
asdf schrieb: > Warum nicht von Hand? Wie viele tausend SD-Karten möchtest du denn > beschreiben? Meine 2 GB Sd karte hat tausende 512 Byte Sektoren und das Textfile auch bis zu zweitausend von dem her ist das etwas mühselig ^^ aber ich werds mal mit Python probieren,ein Script zu schreiben, auch wenn ich bis jetzt noch 0 ahnung davon habe . Ich hatte nur gehofft das soetwas in der Art schon wer gemacht hat somit würde ich mir einen beträchtlich Aufwand ersparen um eine Script Sprache zu lernen . Aber trotzdem danke das mit den Zeilen auffüllen ist garkeine so schlechte Idee .
Was ist der Grund dafür einen Sektor pro Zeile zu verwenden? Wie lang sind denn die Zeilen?
Ich hab' mal so was Ähnliches mit "dd" für Windows gemacht. Kopiert was auch immer mit beliebigem Offset auf die Karte. Braucht Admin(elevated!)-Rechte. Gruß, Oliver
Der Grund ist das auf der SD karte genug Sektoren sind und ich mir mit dem µC leicht beim auslesen/filtern der zeilen tue . Etwa 50 Zeichen pro Zeile sind sie lang. Einen dd Befehl einfach in eine cmd befehlszeile? Funktioniert das? Danke für die Antworten (: Lg
Das funktioniert sogar einwandfrei. Schreibe Deine Daten in eine Datei und kopiere die dann mit "dd" auf die Karte. Ich habe mal für einen Sound-Geocache ein Programm geschrieben, welches auf diese Art und Weise ein primitives Dateisystem für einen einfachen MC auf der SD-Karte anlegt. Für FAT war der MC viel zu schwach, mit meinem ollen Dateisystem hat es trotzdem gut geklappt. Du solltest darauf achten immer "dd --filter=removable ..." zu verwenden, um Dir nicht Deine Platten zu schrotten ;-) Gruß, Oliver
Okay ich habs gerade probiert ich schreibe : dd if=C:\Python27/test12.txt of=F wenn ich mir dan aber mit einem hexeditor(HxD) die SD karte ,die bei mir das Laufwerk F: ist ansehe, sehe ich das File nicht. Mfg Hermann
Nun ja, die Syntax zu "dd" solltest Du schon kennen, bevor Du das Kommando benutzt. "dd --list" zeigt Dir die Partitionsnamen an, die Du dann verwenden musst. Bei meinem USB-Stick lautet das z.B. "of=\\?\Device\Harddisk2\Partition0". An Deiner Stelle würde ich ja das "--filter=removable" nie weglassen! Gruß, Oliver
Weil oben Python erwähnt wurde und mir gerade langweilig war hab ich mir mal einen Python crash-Kurs gegönnt. Hier das Ergebnis:
1 | import linecache |
2 | lineend = 0 |
3 | lineno = 1 |
4 | |
5 | empty_sector = "" |
6 | char_no = 0 |
7 | while char_no < 512: |
8 | empty_sector = empty_sector + " " |
9 | char_no = char_no + 1 |
10 | |
11 | |
12 | out_file = open( "c:/opt/Temp/Sec_out.txt", "w" ) |
13 | while not lineend: |
14 | aline = linecache.getline( "c:/opt/Temp/SplitDemoText.txt", lineno ) |
15 | lineno = lineno + 1 |
16 | if len( aline ) == 0: |
17 | lineend = 1 |
18 | if len( aline ) > 0: |
19 | out_line = aline[ 0:len( aline )-2 ] + empty_sector[ len( aline )-2:512 ] |
20 | out_file.write( out_line ) |
21 | out_file.close() |
Sicher würde ein Python-Profi das anders/besser machen, aber für die allererste Stunde Python geht's und Liefert das, was gebraucht wird. Einfach die Filenamen entsprechend anpassen und schon hast Du ein File, welches 512 byte pro Zeile hat. Das dann einfach auf eine frisch formatierte SD-Karte kopieren und FAT bleibt erhalten. Musst halt in Deinem Programm herausfinden oder hardcoden wo der erste Sektor der Datei liegt. Oder du nimmst dd und schreibst das File Sektorweise auf die SD-Karte.
PS: das "if len( aline ) > 0:" liegt eigentlich auf der gleichauf mit dem "if len( aline ) == 0:" Ebenso "out_line = aline[ 0:len( aline )-2 ] + empty_sector[ len( aline )-2:512 ]" und "out_file.write( out_line )" Hat das Forum-System scheinbar was dagegen! Vermutlich ist es durch den Mix von Tabs/Spaces durcheinander gekommen.
Oliver R. schrieb: > "dd --list" zeigt Dir die Partitionsnamen an, die Du > dann verwenden musst. Bei meinem USB-Stick lautet das z.B. > "of=\\?\Device\Harddisk2\Partition0". An Deiner Stelle würde ich ja das > "--filter=removable" nie weglassen! Wenn ich bei cmd "dd --list" eingebe kommt "unrecognized option Try ´dd --help´" und im help stehen dan die üblichen funktionen wie if,of,bs usw .. --filter=removable schmeist er mir genau das selbe raus . komm ich sonst irgendwie zu dem Pfad? oder mache ich was falsch?
Also ich galube, wir reden nicht vom gleichen "dd" for windows. Meins habe ich hier her: http://www.chrysocome.net/dd Gruß, Oliver
1 | infile=open("in.txt","r")
|
2 | outfile=open("out.txt","w")
|
3 | for line in infile: |
4 | # Zeilenumbruch wegmachen |
5 | line=line.strip() |
6 | # auffuellen |
7 | line=line+(512-len(line))*"\0" |
8 | outfile.write(line) |
Ich wusste doch, dass es besser geht! Wäre ich nicht über den linecache gestolpert ... wer weiß wie es dann aussehen würde. Auf .strip() und *"\0" kommt man auch nicht so einfach in nem ultra-schnellen Selbststudium ohne Tuts - also ausschließlich anhand der Hilfe. Danke @asdf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.