Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Per Batchdatei Datei in Datei kopieren

Mitglied: Rico55

Rico55 (Level 1) - Jetzt verbinden

11.07.2013 um 16:35 Uhr, 2359 Aufrufe, 12 Kommentare, 3 Danke

Hallo

ich habe eine Textdatei in der sehr große Zeilen drinstehen ( eine Zeile hat 40 Kilobyte)

Diese Datei, nennen wir sie abc.txt die aktuell 1 Zeile beherbergt,
möchte ich exponentiell vergrößern und die logik in der batchfile ablegen.

Ein Beispiel:

In Datei abc.txt steht

a, b , c


Ich hätte gerne dass das Batchskript die Datei abc.txt einließt und wieder in abc.txt reinschreibt.
Dann habe ich beim ersten Durchlauf 2 zeilen, dann 4 ,dann 8 usw...bis 1 millionen

Kann mir da jemand helfen?

Gruß
Mike
Mitglied: MrNetman
11.07.2013 um 18:22 Uhr
Und wann platzt deine Datei?
Eine Million Zeilen mit jeweils 40.000 Zeichen. (4E4 x 1E6 = 4E10)
das ergibt mindestens 40 Gigabyte

Gruß
Netman
Bitte warten ..
Mitglied: Endoro
11.07.2013 um 18:25 Uhr
Hallo Mike,

leider kann batch nur mit Zeichenketten bis 8191 Zeichen umgehen.

lg
Bitte warten ..
Mitglied: Xolger
11.07.2013, aktualisiert 12.07.2013
Hallo Mike,

nicht schön aber funktioniert:
01.
copy 1.txt 2.txt 
02.
copy 1.txt + 2.txt 
03.
del 2.txt
Für Schleifen gibs hier ja genug Beispiele und Experten.
Und bestimmt gibt es auch ne elegante Lösung.


Gruß
Xolger
Bitte warten ..
Mitglied: rubberman
11.07.2013, aktualisiert um 23:45 Uhr
Hallo Mike,

Was ist der tiefere Sinn der Aktion?
Wenn es nur darum gehen sollte eine Datei mit einer bestimmten Größe zu erzeugen, dann hilft dir FSUTIL (benötigt aber Adminrechte).
fsutil file createnew "%userprofile%\desktop\abc.txt" 1000
... erzeugt eine Datei mit 1000 Nullzeichen (=1000 Byte Größe) auf deinem Desktop.

Grüße
rubberman
Bitte warten ..
Mitglied: Rico55
12.07.2013 um 13:43 Uhr
Hallo,

tieferer Sinn ist wirklich das was ich geschrieben habe...

ich habe eine CSV Datei mit einer Zeile und die hat extrem vielen Spalten (>1000)
Nun möchte ich die Datei nicht irgendwo lagern müssen, weil wie schon richtig bemerkt, sind das 40 GB Platzverschwendung.
Ich möchte das mir ein Skript die Datei on the fly zusammenbaut.

Im SQL würde ich nun einfach ein INSERT INTO table SELECT * from Table machen ... das mache ich 20 mal, dann habe ich 1 Millionen
Datensätze mit 1000 Spalten.
Genau das möchte ich per Batch nun mit der CSV Datei machen - ich möchte eine batchfile mit einer Zeile und 1000 Spalten irgendwo ablegen und nach Bedarf soll er per klick 1000000 Datensätze draus machen (damit unser Azubi das auch kann)

Eine neue Anforderung ist zusätzlich, dass der erste Wert pro Zeile nach oben inkrementieren soll, damit ich eine identifizierende ID habe.

Gruß Mike

PS:
Diejenigen die nun sagen "das geht mit batch nicht" ... mir ist es grundsätzlich egal, wenn das mit VB oder Powershell geht, bin ich ganz ohr.
Bitte warten ..
Mitglied: Endoro
12.07.2013, aktualisiert um 14:40 Uhr
Hallo Mike,

Zitat von Rico55:
ich möchte eine batchfile mit einer Zeile und 1000 Spalten
irgendwo ablegen und nach Bedarf soll er per klick 1000000 Datensätze draus machen

Meine Batchdateien sind einspaltig und enthalten Programmcode

Wie sollen aus einer Zeile mit 1000 Spalten 1 Mio Datensätze werden?
Hab ich irgendwas verpasst

lg
Bitte warten ..
Mitglied: rubberman
12.07.2013 um 14:46 Uhr
Hallo Mike.

Quick'n'dirty als VBScript:
01.
Option Explicit 
02.
 
03.
Const sFilePath = "abc.csv" 
04.
Const iDataSets = 1000 
05.
 
06.
Const ForWriting = 2 
07.
 
08.
Dim oFSO, oFile, aFirstLine, sLine, i, iID 
09.
 
10.
Set oFSO = CreateObject("Scripting.FileSystemObject") 
11.
aFirstLine = Split(oFSO.OpenTextFile(sFilePath).ReadLine, ",") 
12.
iID = CInt(Trim(aFirstLine(0))) 
13.
sLine = "" 
14.
For i = 1 To UBound(aFirstLine) 
15.
  sLine = sLine & "," & aFirstLine(i) 
16.
Next 
17.
Set oFile = oFSO.OpenTextFile(sFilePath, ForWriting) 
18.
For i = 1 To iDataSets 
19.
  oFile.WriteLine CStr(iID) & sLine 
20.
  iID = iID + 1 
21.
Next 
22.
oFile.Close
Die erste Zeile in meiner "abc.csv" sah so aus:
0,a,b,c
Grüße
rubberman
Bitte warten ..
Mitglied: Endoro
12.07.2013, aktualisiert um 16:53 Uhr
Ich hab es mal mit awk getestet:
C:\TEST>awk -F, -v OFS=, "{for (i=1;i<=10^6;i++) print(i,$0)}" file.csv>test.csv 
 
C:\TEST>dir *.csv 
12.07.2013  15:40            41.003 file.csv 
12.07.2013  16:08    41.009.929.900 test.csv
.. und mit einer Mischung aus sed und batch:
C:\TEST>(for /l %a in (1,1,1000000) do @echo(%a)>numbers.csv 
 
C:\TEST>sed "s#.*#s/.*/\&,&/#" file.csv|sed -f - numbers.csv>test.csv 
 
C:\TEST>dir *.csv 
12.07.2013  16:20            41.003 file.csv 
12.07.2013  16:20         7.888.896 numbers.csv 
12.07.2013  16:48    41.009.888.896 test.csv
awk war 5 Minuten schneller, kaum zu glauben.

lg
Bitte warten ..
Mitglied: Rico55
15.07.2013 um 13:38 Uhr
Hallo rubberman,

erst mal vielen Dank für deine Mühe - das funktioniert tadellos.

Ich muss das selbe noch für eine Fixed Length CSV machen.
Kannst Du mir da vielleicht noch mal ein Beispiel dazu geben bitte?

Grüße
Mike
Bitte warten ..
Mitglied: rubberman
15.07.2013 um 18:22 Uhr
Hallo Mike,

ich denke schon. Aber kannst du mir "Fixed Length" mal erklären? Was hat denn eine gleichbleibende Länge? Sehe von hier aus leider nicht deinen Bildschirm.

Grüße
rubberman
Bitte warten ..
Mitglied: Rico55
23.07.2013, aktualisiert um 15:19 Uhr
Moin,

sorry ich warleider zwischendurch erkrankt.

Fixed Length bedeutet das die "Spalten" in der CSV Datei, den Wert des größten dargestellt wertes annehmen.
Heisst wenn du 10 Zeilen hast und eine Spalte A stehen möglicherweise in den ersten neun Zeilen nur 2-3 Buchstaben drin
und im zehnten Datensatz steht eine 1000 BYTE große Zeichenkette => dann ist Spalte A immer 1000 BYTE groß.
DIe ersten 9 Zeilen werden mit Leerzeichen aufgefüllt um auf die 1000 Byte zu kommen.
(http://www.webopedia.com/TERM/F/fixed_length.html
http://wiki.answers.com/Q/What_is_difference_between_fixed_length_recor ...)

Kannst Du mir damit bitte noch helfen?
Irgendwie klappt das bei mir nicht.

Gruß Mike

PS:
ich komme auch schon recht weit

Ich schaffe es aber leider nicht folgende Anforderungen umzusetzen

1) Meine Zeile hat 1000 "Spalten". DIe will ich ungerne von Hand da eingeben.
Die "Spalten" sind nun getrennt durch einen Tab.

2) Ich will nicht alle Spalten auf die selbe fixed length setzen sondern nur z.B. die Spalte
777 auf 100 BYTE.
Bitte warten ..
Mitglied: rubberman
24.07.2013 um 21:27 Uhr
Hallo Mike,

ich weiß nicht ob dir bewusst ist, dass du Äpfel mit Birnen vergleichst.

Eine Datenbank ist ein binäres Gebilde. Dort kannst du den Speicherplatz für verschiedene Datenfelder vordefinieren. Was dann die Datenbanksoftware tut ist abhängig von der Implementation.
Beispielsweise könnte der Speicherbereich die Daten enthalten, die restlichen Bytes sind ausgenullt (mit HEX 0x00 beschrieben).
Oder ein fixer Datenbereich enthält den Wert, der Rest ist zufälliger Datenmüll. Start und Länge des eigentlichen Wertes sind adressiert.

Du möchtest aber nun mit einer CSV Datei arbeiten. CSV ist aber Plaintext, dort funktioniert das nicht! Das einzige, was du tun kannst ist Leerzeichen voran- oder nachzustellen. Stellt sich mir die Frage, welches Benefit du damit erreichst? Leerzeichen sind Zeichen, die dann zum Wert gehörig interpretiert werden und nicht etwa als "Nichts".

Was also ist das Ziel der Aktion??? Was versprichst du dir davon?

Grüße
rubberman
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Text per Batchdatei kopieren und einfügen

Frage von imebroBatch & Shell47 Kommentare

Hallo, ich würde gerne für meine Kollegen eine kleine Hilfe basteln Wir nutzen ein Programm, in dem auch Memos ...

Batch & Shell

Batchdatei soll überprüfen, ob auf eine Log Datei

Frage von hoppalaBatch & Shell1 Kommentar

Hiho :) ! Ein Freund und ich haben eine Batchdatei erstellt, leider kommen wir bei einer Sache nicht weiter. ...

Batch & Shell

In Batchdatei mehrere Dateien auswählen

gelöst Frage von DoppellhelixBatch & Shell7 Kommentare

Hallo, ich habe eine Batchdatei, die mir innerhalb einer Logdatei (txt), die Zeilen neu formatiert. Dieses Script funktioniert hervorragend. ...

Batch & Shell

Per Batchdatei kopieren, wenn eine bestimmte Anzahl und Bezeichnung von Dateien in einem Verzeichnis vorhanden sind

gelöst Frage von imebroBatch & Shell5 Kommentare

Hallo, um einen Kopiervorgang per robocopy zu starten, möchte ich zunächst in einem bestimmten Verzeichnis prüfen, ob bestimmte Dateien ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 2 TagenHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 2 TagenRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 3 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 3 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Netzwerkmanagment im Haus mit Switch, Panel und pfsense
gelöst Frage von CorraggiounoNetzwerkmanagement15 Kommentare

hi zusammen, wir sind gerade dabei das ganze Haus bzw. die einzelnen Zimmer mit netzwerkdosen zu versorgen. Vom Keller ...

Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk14 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

Netzwerkgrundlagen
VLAN - Offene Fragen
Frage von KnettenbrechNetzwerkgrundlagen13 Kommentare

Hallo zusammen, ich befasse mich derzeit mit dem Thema VLAN. Hierzu habe ich schon einige Guides gelesen, einschließlich des ...

Google Android
Empfehlung: Android Ortungsapp
gelöst Frage von certifiedit.netGoogle Android13 Kommentare

Guten Morgen, grundsätzlich vorweg, ich wollte mich eben schlau machen, bzgl einer Ortungsapp, welche Androidbasiert einem anderen Androidsmartphone mitteilt, ...